我想使用来自用户的输入作为搜索某些文本的正则表达式模式 . 它有效,但我如何处理用户放置在正则表达式中有意义的字符的情况?例如,用户想要搜索Word (s) :正则表达式引擎将 (s) 作为一个组 . 我希望它像字符串 "(s)" 一样对待它 . 我可以在用户输入上运行 replace 并用 \( 替换 ( ,用 \) 替换 ) ,但问题是我需要替换每个可能的正则表达式符号 . 你知道更好的方法吗?
(s)
"(s)"
replace
\(
(
\)
)
使用 re.escape() 函数:
re.escape()
4.2.3 re Module Contents
escape(string)返回字符串,所有非字母数字反向;如果要匹配可能包含正则表达式元字符的任意文字字符串,这非常有用 .
一个简单的例子,搜索所提供字符串的任何出现,可选地后跟'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作为锚点
设置Or条件以匹配完整单词或正则表达式 .
参考链接:How to match a whole word that includes special characters in regex
4 回答
使用
re.escape()
函数:4.2.3 re Module Contents
一个简单的例子,搜索所提供字符串的任何出现,可选地后跟's',并返回匹配对象 .
你可以使用re.escape():
不幸的是,re.escape()不适合替换字符串:
解决方案是将替换放在lambda中:
因为lambda的返回值被re.sub()视为文字字符串 .
请试一试:
\ Q和\ E作为锚点
设置Or条件以匹配完整单词或正则表达式 .
参考链接:How to match a whole word that includes special characters in regex