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

Python regex search, match 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找到的字符数相同。还有其他选择吗,或者我缺少什么?

问题恰恰是您正在使用 re.DOTALL a.k.a S flag. DOTALL means that the dot matches even newlines; if you take it out,匹配不能跨到新行。


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

类似于:

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