在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作为锚点

把一个或条件匹配一个完整的单词或正则表达式。

参考链接: 如何匹配正则表达式中包含特殊字符的整个单词