Python正则表达式搜索,匹配不匹配

时间:2015-04-11 09:44:29

标签: python regex mismatch

我试图检查输入文件的语法,我的项目的规则在哪里。

我想检查一下是否正确。所以我有我的正则表达式

\s*.*\$\s*..*\$\s*\|}\s*.*\s*,*

找到了这个文字:

sometimes $so$ |} hello,
life $good$ |} hello, 
not $that$ |} hello

现在在python中我使用re.findall查找正确的文本,加入找到的模式,然后将其与起始文本的长度进行比较。但由于某种原因,它不起作用。

代码:rule_syntax_check = re.findall("\s*.*\$\s*..*\$\s*\|}\s*.*\s*,*", RULES, re.DOTALL)

例如会导致错误:

sometimes $so$ |} hello,
life $good$ |  } hello, 
not $that$ |} hello

但它也找到第二行,因此字符数与我findall找到的字符数相同。还有其他选择,或者我缺少什么?

1 个答案:

答案 0 :(得分:1)

问题在于您正在使用re.DOTALL a.k.a S标志。 DOTALL表示该点与新行相匹配;如果你take it out,则匹配不能跨越新行。


然而,更好的解决方案是分别测试每条记录;例如,如果它们以逗号分隔,则您首先按,拆分,然后使用re.match将单个规则与正则表达式匹配。请注意,re.match未锚定到字符串的末尾,因此您需要添加额外的$以确保需要与完全字符串匹配(尽管此处不需要):

类似的东西:

rules_split = RULES.split(',')
for i in rules_split:
    if not re.match(r'\s*.*\$\s*.+\$\s*\|}.*$')