Skip to main content
 首页 » 编程设计

python之将存储在变量中的正则表达式与量词相结合的正确语法是什么

2024年08月23日32小虾米

我知道堆栈溢出中已经有很多关于在正则表达式中使用变量的问题,如果变量是一个单词,或者如果它只需要匹配一次,我设法让它工作;但是,一旦我添加了特殊字符/空格和量词,我就无法匹配。例如,我想将 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 : 它匹配

的 3 个序列
  • \s* - 0 个或多个空格后跟
  • what\what - 文字 what what 子字符串。