在Python中转义正则表达式字符串
我想使用用户输入作为正则表达式来搜索某些文本。 它有效,但我如何处理用户在正则表达式中放置有意义的字符的情况? 例如,用户想要搜索Word (s)
:正则表达式引擎将把(s)
作为一个组。 我希望它把它当作一个字符串"(s)"
来对待。 我可以运行replace
用户输入并替换(
用(
和)
与)
但问题是我需要做替换每个可能的正则表达式符号。 你知道更好的方法吗?
使用re.escape()
函数来实现这一点:
4.2.3 re
模块内容
逃生(字符串)
返回所有非字母数字字符串的字符串; 如果你想匹配一个可能有正则表达式元字符的任意文字字符串,这很有用。
一个简单的例子,搜索任何发生的提供的字符串,可选的后跟's',并返回匹配对象。
def simplistic_plural(word, text):
word_or_plural = re.escape(word) + 's?'
return re.match(word_or_plural, text)
你可以使用re.escape():
re.escape(string)返回所有非字母数字字符串的字符串; 如果你想匹配一个可能有正则表达式元字符的任意文字字符串,这很有用。
>>> import re
>>> re.escape('^a.*$')
'^a.*$'
不幸的是, re.escape()
不适合替换字符串:
>>> re.sub('a', re.escape('_'), 'aa')
'__'
解决方案是将替换放入lambda:
>>> re.sub('a', lambda _: '_', 'aa')
'__'
因为lambda的返回值被re.sub()
视为一个文字字符串。
上一篇: Escaping regex string in Python
下一篇: Regex to match string that does not have a preceding string