Как разделить строку по шаблону регулярных выражений, а также захватить содержимое шаблона? - PullRequest
1 голос
/ 19 июня 2019

Я хочу разбить текст, содержащий цифры

text = "bla bla 1 bla bla bla 142 bla bla (234.22)"

и хотите добавить '\n' до и после каждого номера.

> "bla bla \n1\n bla bla bla \n142\n bla bla (234.22)"

Следующая функция возвращает мне подстроки, но она отбрасывает шаблон, то есть числа. Каков наилучший способ заменить шаблон чем-то, что содержит шаблон в python?

re.split(' [0123456789]+ ', text)

Ответы [ 2 ]

3 голосов
/ 19 июня 2019

Попробуйте этот код!Это может помочь!

import re
text = "bla bla 1 bla bla bla 142 bla bla"
replaced = re.sub('([0-9]+)', r'\n\1\n',text)
print(replaced)

Output:  'bla bla \n1\n bla bla bla \n142\n bla bla' 
3 голосов
/ 19 июня 2019

Используйте

s = re.sub(r' \d+ ', '\n\\g<0>\n', s)

См. Демоверсию regex .

Чтобы заменить только отдельные числа как целые слова, используйте

s = re.sub(r'\b\d+\b', '\n\\g<0>\n', s)

Если вы хотите сопоставить числа, заключенные в пробелы, используйте только один из

re.sub(r'(?<!\S)\d+(?!\S)', '\n\\g<0>\n', s) # also at the start/end of string
re.sub(r'(?<=\s)\d+(?=\s)', '\n\\g<0>\n', s) # only between whitespaces

На самом деле, замена может быть указана как '\n\g<0>\n', так как \g является неопределенной escape-последовательностью, и обратная косая черта в этом случае будет обрабатываться как литерал char и будет сохраняться в результирующей строке для формирования конструкции обратной ссылки регулярного выражения .

Демо Python :

import re
s = "bla bla 1 bla bla bla 142 bla bla"
s = re.sub(r'\b\d+\b', '\n\\g<0>\n', s)
print(s) # => bla bla \n1\n bla bla bla \n142\n bla bla
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...