В python я хочу использовать регулярное выражение для поиска встроенного списка элементов внутри строки - PullRequest
0 голосов
/ 27 мая 2020

Я хочу иметь возможность разбить следующую строку:

"This is a string with an embedded list.  1. My first list item.  2. My second item.  a. My first sub-item.  b. My second sub-item.  3. My last list item."

Я хотел бы разбить ее как:

"This is a string with an embedded list."
"1. My first list item."
"2. My second item."
"a. My first sub-item."
"b. My second sub-item."
"3. My last list item."

Я не могу гарантировать, что каждый элемент встроенного списка всегда будет ему предшествуют два пробела, но он будет иметь хотя бы один, иначе он начнет строку. Кроме того, я не могу гарантировать, что первое слово во встроенном списке всегда будет с заглавной буквы. Наконец, пронумерованная и буквенная часть внутри строки может быть go до подростков с точки зрения чисел, поэтому можно получить запись, начинающуюся, скажем, с «10». Если нет встроенного списка, я бы хотел, чтобы это просто возвращало исходную строку, без необходимости разделения.

Что касается правил для идентификации элемента встроенного списка, вот некоторые из моих мыслей:

  1. Перед ним всегда будет некоторое количество пробелов, один или несколько пробелов, или он может начать строку.
  2. После пробела или начала строки оно будет иметь от 1 до 2 цифры, за которыми следует точка, или один символ, за которым следует точка. Символ может быть или не быть заглавным.

Хотя это не исчерпывающий набор условий, я думаю, что он найдет хорошее количество встроенных списков.

1 Ответ

1 голос
/ 27 мая 2020

Вы можете разделить с помощью этого регулярного выражения, которое ищет некоторое количество пробелов, за которыми следуют либо цифры и точка, либо буква и точка:

\s+(?=(?:\d+|[a-z])\.)

In python (обратите внимание на использование re.I флаг для соответствия прописным и строчным буквам):

import re

s = "This is a string with an embedded list.  1. My first list item.  2. My second item.  a. My first sub-item.  b. My second sub-item.  3. My last list item."

print(re.split(r'\s+(?=(?:\d+|[a-z])\.)', s, 0, re.I))

Вывод:

[
 'This is a string with an embedded list.',
 '1. My first list item.',
 '2. My second item.',
 'a. My first sub-item.',
 'b. My second sub-item.',
 '3. My last list item.'
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...