在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()视为一个文字字符串。

链接地址: http://www.djcxy.com/p/13455.html

上一篇: Escaping regex string in Python

下一篇: Regex to match string that does not have a preceding string