Regex: сопоставить массив переменных элемента, отбрасывая необязательный текст - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно разделить некоторые строки в очень большом массиве, где строки имеют вид:

example = [
    "IV - Some text",
    "A) Some other text",
    "17-ter) an article",
    "2), 3) some ugly grouping",
    "Some text without any prefix!",
    "2), 3) some ugly grouping with (parenthesis)"
]

У меня есть этот код:

import re
s = "b), c) molto altro testo per l\'estrattore"
re.match("(?:([\d\w-]+)[\), \-])*(.*)", s).groups()

Приведенный выше код приводит к:

('b', ", c) molto altro testo per l'estrattore")

мой ожидаемый результат, однако, ('b', 'c', 'molto altro testo per l'estrattore').

1 Ответ

0 голосов
/ 01 апреля 2020

После комментария Ника я решил с помощью этого регулярного выражения:

for i in example:
    print(re.findall(r"'?([a-zA-Z0-9-]+(?=\))|[a-zA-Z0-9-]+(?= - )|(?<!\S)[^- ].+)", i))

Вывод:

['IV', 'Some text']
['A', 'Some other text']
['17-ter', 'an article']
['2', '3', 'some ugly grouping']
['Some text without any prefix!']
['2', '3', 'some ugly grouping with (parenthesis)']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...