我知道堆栈溢出中已经有很多关于在正则表达式中使用变量的问题,如果变量是一个单词,或者如果它只需要匹配一次,我设法让它工作;但是,一旦我添加了特殊字符/空格和量词,我就无法匹配。例如,我想将 some_var 中的任何内容匹配到包含它的 3 个连续副本的任何字符串。:
import re
some_var = "what what"
should_match = "what what what what what what hey"
not_a_match = "what what what what hey what what"
match = re.search(re.escape(some_var){3}, should_match)
no_match = re.search(re.escape(some_var){3}, not_a_match)
但是最后两行给我一个语法错误,我试过了
'(.*)'+re.escape(some_var){3}+'(.*)'
('(.*)'+re.escape(some_var)+'(.*)'){3}
'(.*)'+'re.escape(some_var){3}'+'(.*)'
're.escape(some_var){3}'
...我似乎无法获得正确匹配的语法(我一直得到 false 条件)。我试过寻找答案,但我不确定如何让它正确识别量词。
请您参考如下方法:
您需要将那几个词分组并添加可选的空格:
match = re.search(r"(?:\s*{0}){{3}}".format(re.escape(some_var)), should_match)
参见 IDEONE demo
正则表达式看起来像 (?:\s*what\what){3} 和 this is how it works : 它匹配
\s*- 0 个或多个空格后跟what\what- 文字what what子字符串。
