Python regex match group - PullRequest
       5

Python regex match group

0 голосов
/ 09 мая 2018

RANDOMSTRING являются буквенно-цифровыми, включая пробелы не более 50 символов

RANDOMSTRING $RANDOMFLOAT Paid with Visa ending in RANDOMINT *- For: RANDOMSTRING -*

RANDOMINTx *RANDOMSTRING* (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING1

$RANDOMFLOAT
RANDOMINTx RANDOMSTRING (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING2
=E2=80=A2 RANDOMSTRING3
=E2=80=A2 RANDOMSTRING4
=E2=80=A2 RANDOMSTRING5

$RANDOMFLOAT
RANDOMINTx *RANDOMSTRING* (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING6
=E2=80=A2 RANDOMSTRING7

$RANDOMFLOAT
RANDOMINTx *RANDOMSTRING* (RANDOMSTRING)
=E2=80=A2 RANDOMSTRING8
=E2=80=A2 RANDOMSTRING9

Здравствуйте. Я хочу получить RANDOMSTRING s в каждой из =E2=80=A2 строк в виде массива массивов. Они сгруппированы по группировке = E2 = 80 = A2.

Пример ожидаемого результата:

[[RANDOMSTRING1], [RANDOMSTRING2, RANDOMSTRING3, RANDOMSTRING4, RANDOMSTRING5], [RANDOMSTRING6, RANDOMSTRING7], [RANDOMSTRING8, RANDOMSTRING9]]

Что я использую:

menu_item_accessories_items = re.findall("((=E2=80=A2 .*$)|\n\n)", bodytext, re.MULTILINE)

Вывод, который я получаю (массив точек):

[(RANDOMSTRING1, RANDOMSTRING1), (RANDOMSTRING2, RANDOMSTRING2), (RANDOMSTRING3, RANDOMSTRING3), (RANDOMSTRING4, RANDOMSTRING4), (RANDOMSTRING5, RANDOMSTRING5), (RANDOMSTRING6, RANDOMSTRING6), (RANDOMSTRING7, RANDOMSTRING7), (RANDOMSTRING8, RANDOMSTRING8), (RANDOMSTRING9, RANDOMSTRING9)]

1 Ответ

0 голосов
/ 09 мая 2018

Вероятно, это не самый элегантный метод, и я не уверен, как он будет обрабатывать угловые случаи, не представленные здесь, но код ниже сначала строит один список, разделенный пустыми строками. Затем он перебирает все записи, создавая новый список каждый раз, когда встречается с разделителем.

lines = [x for x in bodytext.split('\n') if x == '' or x.startswith('=E2=80=A2')]

res = []
tmp = []
for line in lines:
    if line == '':
        if len(tmp) > 0:
            res += [tmp]
        tmp = []
    else:
        tmp += line.split(' ')[1:]

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