我想使用来自用户的输入作为搜索某些文本的正则表达式模式.它有效,但我如何处理用户放置在正则表达式中有意义的字符的情况?例如,用户想要搜索Word (s):正则表达式引擎将(s)作为一个组.我希望它像一个字符串一样对待它"(s)".我可以运行replace用户输入并替换(with \(和)with \)但问题是我需要替换每个可能的正则表达式符号.你知道更好的方法吗?
dda*_*daa 295
使用此re.escape()功能:
逃生(字符串)
返回字符串,所有非字母数字反向; 如果要匹配可能包含正则表达式元字符的任意文字字符串,这非常有用.
一个简单的例子,搜索所提供字符串的任何出现,可选地后跟's',并返回匹配对象.
def simplistic_plural(word, text):
word_or_plural = re.escape(word) + 's?'
return re.match(word_or_plural, text)
Run Code Online (Sandbox Code Playgroud)
gim*_*mel 51
你可以使用re.escape():
re.escape(string)返回字符串,所有非字母数字反斜杠; 如果要匹配可能包含正则表达式元字符的任意文字字符串,这非常有用.
>>> import re
>>> re.escape('^a.*$')
'\\^a\\.\\*\\$'
Run Code Online (Sandbox Code Playgroud)
不幸的是,re.escape()不适合替换字符串:
>>> re.sub('a', re.escape('_'), 'aa')
'\\_\\_'
Run Code Online (Sandbox Code Playgroud)
一种解决方案是将替换放在 lambda 中:
>>> re.sub('a', lambda _: '_', 'aa')
'__'
Run Code Online (Sandbox Code Playgroud)
因为 lambda 的返回值被视为re.sub()文字字符串。
| 归档时间: |
|
| 查看次数: |
109528 次 |
| 最近记录: |