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*\|}.*$')
我正在尝试检查输入文件的语法,我的项目规则在哪里。
我想检查一下这是否正确。所以我有我的正则表达式
\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*\|}.*$')