Выражение регулярного выражения для разделения на "(буква или цифра)" - PullRequest
0 голосов
/ 11 июля 2020

Извините, на этот вопрос, возможно, уже есть ответ, но я не могу его найти. Я пытаюсь разбить следующую строку:

Heading:
(A) point A
   (1) subpoint 1
   (2) subpoint 2
(B) point B

на:

[Heading:, point A, subpoint 1, subpoint 2, ... ]

Мой текущий код таков:

section.split("\n[\\(\\D\\)]");

Любая помощь будет принята с благодарностью ! (Кроме того, побочный вопрос, можно ли сохранить пулю в разделенном массиве? Чтобы в массиве была «(A) точка A» вместо просто «точки A»?)

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Регулярное выражение \n\s*\(.\)\s? возвращает

['Heading:', 'point A', 'subpoint 1', 'subpoint 2', 'point B']

, а \n\s* возвращает

['Heading:', '(A) point A', '(1) subpoint 1', '(2) subpoint 2', '(B) point B']
1 голос
/ 11 июля 2020

Вы можете использовать следующий шаблон:

\s*\([0-9a-zA-Z]\)\s*

Демо .

Разбивка:

\s*         # Zero or more whitespace characters (including line breaks).
\(          # Matches '(' literally.
[0-9a-zA-Z] # Matches an English letter or digit.
\)          # Matches ')' literally.
\s*         # Zeror or more whitespace characters.

Примечание. Если вы хотите сопоставить несколько букв или цифр, вы можете добавить + после класса символа (например, [0-9a-zA-Z]+).

Java пример:

String pattern = "\\s*\\([0-9a-zA-Z]\\)\\s*";
String section = "Heading:\n"
     + "(A) point A\n"
     + "   (1) subpoint 1\n"
     + "   (2) subpoint 2\n"
     + "(B) point B";

String[] parts = section.split(pattern);
System.out.println(Arrays.toString(parts));

Вывод:

[Heading:, point A, subpoint 1, subpoint 2, point B]

Попробуйте онлайн .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...