在Python中转义正则表达式字符串
我想使用用户的输入作为正则表达式来搜索某些文本。 它的工作原理,但我如何处理用户在正则表达式中有意义的字符? 例如,用户想要搜索Word (s)
:正则表达式引擎将把这个(s)
作为一个组。 我希望它把它看作一个字符串"(s)"
。 我可以运行replace
用户输入和替换(
与\(
和)
\)
但问题是我将需要做替换每一个可能的正则表达符号。 你知道更好的方法吗?
re.escape()
使用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()
视为一个文字字符串。
请试试看:
\ Q和\ E作为锚点
把一个或条件匹配一个完整的单词或正则表达式。
参考链接: 如何匹配正则表达式中包含特殊字符的整个单词