Я работаю с регулярным выражением Python и пытаюсь получить сопоставление с шаблоном из сопоставляемого объекта, а не с самим текстом.
У меня есть несколько шаблонов для замены, и я делаю это:
import re
patterns = {
r'^[ |\n]+': '',
r'[ |\n]+$': '',
r'[ |\n]+': ' '
}
text = ' Hello there, I\n need your help here plase :) '
text = re.sub('|'.join(patterns.keys()),
lambda match: patterns[ match.group(0) ],
text)
Но это неправильное решение, потому что match.group(0)
возвращает совпадающий текст, поэтому ни один из них не будет равен любому ключу шаблонов dict.
Я пытался match.pattern
, но получил исключение и попыталсяmatch.re
, но это дает все re.compile
объект и его образец для этой проблемы '^[ |\n]+|[ |\n]+$|[ |\n]+'
. Я буду очень признателен за вашу помощь.
РЕДАКТИРОВАТЬ: на основе решения Barmar Я получил это:
import re
patterns = [
(r'^[ |\n]+', ''),
(r'[ |\n]+$', ''),
(r'[ |\n]+', ' ')
]
def getreplacement(match):
for i, group in enumerate(match.groups()):
if group:
return patterns[ i ][ 1 ]
text = ' Hello there, I\n need your help here plase :) '
text = re.sub('|'.join('(' + p[ 0 ] + ')' for p in patterns), getreplacement, text)
print(text)
Но все еще не способ всегда получить шаблон изгруппа матчей.