Как разделить строку с помощью модуля re, определив структуру токена - PullRequest
0 голосов
/ 10 марта 2020

Я понимаю, что когда я хочу использовать модуль re в Python и метод split (), мне нужно предоставить шаблон, в котором я хочу разбить строку (т. Е. В пробелах, я бы использовал шаблон как это pattern = re.compile('\\s+')).

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

'letters<space>letters<space>numbers<space>...repeat...'

как мне написать регулярное выражение для разделения на каждом репетиция? Я пытался использовать отрицание выражения, которое совпадает со строкой, до тех пор, пока не будет повторение, как предлагается здесь , но Python выдает ошибку. Любое предложение?

Ответы [ 2 ]

2 голосов
/ 10 марта 2020

Давая пример строки:

text = 'aaaaa 12345 aaaaa bbbbb 12345 bbbbb ccccc 12345 ccccc'

вместо этого вы используете re.split(), может быть, вы можете использовать re.findall():

re.findall(r'\w+\s+\w+\s+\w+', text)
# output: ['aaaaa 12345 aaaaa', 'bbbbb 12345 bbbbb', 'ccccc 12345 ccccc']

Если вы хотите использовать re.split() в любом случае вы можно поместить его в группу, а затем использовать генератор для очистки пробелов:

splitted = re.split(r'(\w+\s+\w+\s+\w+)', text)
#output: ['', 'aaaaa 12345 aaaaa', ' ', 'bbbbb 12345 bbbbb', ' ', 'ccccc 12345 ccccc', '']

[ele for ele in splitted if ele.strip()]
#output: ['aaaaa 12345 aaaaa', 'bbbbb 12345 bbbbb', 'ccccc 12345 ccccc']
1 голос
/ 10 марта 2020

Если я правильно понял вопрос, это может быть способом разделения строк:

In [298]: s                                                                                                           
Out[298]: 'lettersone letterstwo 12 lettersthree lettersfour 34'

In [299]: re.findall(r'(?:\w+ \w+ \d+)', s)                                                                           
Out[299]: ['lettersone letterstwo 12', 'lettersthree lettersfour 34']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...