我正在使用 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)
返回匹配的文本,所以它们都不等于模式字典的任何键。
我试过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)
但仍然不是始终从匹配组中获取模式的方法。