Python正则表达式:OR语句在正则表达式模块中不起作用

时间:2018-12-11 15:49:01

标签: python regex

嗨,我想应用以下表达式来检查替换,插入和删除计数。但是,OR语句似乎不起作用。正则表达式只检查括号中的第一个语句。 例如:

correct_string = "20181201"
regex_pattern = r"((20[0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])){e}"
regex.fullmatch(regex_pattern, correct_string)

输出:

<regex.Match object; span=(0, 8), match='20181201', fuzzy_counts=(1, 0, 0)>

由于第5位数字表示存在一个替换,但是如果在OR语句中存在,则替换

另一个例子:

correct_string = "20180201"
regex_pattern = r"((20[0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])){e}"
regex.fullmatch(regex_pattern, correct_string)

输出:

<regex.Match object; span=(0, 8), match='20180201'>

在这种情况下,它表示根据OR中的第一条陈述,没有替代是正确的。

我该如何解决。谢谢。

1 个答案:

答案 0 :(得分:0)

您需要使用regex.ENHANCEMATCH

  

默认情况下,模糊匹配将搜索满足给定约束的第一个匹配项。 ENHANCEMATCH标志将导致它尝试提高找到的匹配项的匹配度(即减少错误数量)。

Python演示

import regex
correct_string = "20181201"
regex_pattern = r"((20[0-9]{2})(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])){e}"
print(regex.fullmatch(regex_pattern, correct_string, regex.ENHANCEMATCH))
// => <regex.Match object; span=(0, 8), match='20181201'>

请参见online Python demo