正则表达式匹配一些子串,而忽略看似相同的子串?

时间:2017-03-24 21:36:35

标签: python regex string formatting

我有许多字符串,其中包含类似于FRI, 24-MAR-2017的子字符串。我已创建以下内容以捕获这些内容,并分别删除FRI,并将日期重新排序为2017-MAR-24

t = re.sub(r'\b((Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|1[012])-([A-Z]+)-(\d{4}))\b', r'\5-\4-\3', temp)

然而,虽然这或多或少有效,但一些字符串,由于未知原因,似乎被忽略并且不受影响地进行此检查。我使用\s.进行了测试,但无济于事。

传递得很好的字符串是:Sat, 01-APR-2017

不匹配的字符串是:Thu, 13-APR-2017

这里有一些输出的副本来说明(请注意我打印每个字符串两次;一次在上面re.sub之前,一次之后)

Wed, 29-MAR-2017||Thu, 30-MAR-2017
Wed, 29-MAR-2017||Thu, 30-MAR-2017

Sat, 01-APR-2017||Sun, 02-APR-2017
2017-APR-01||2017-APR-02||Yes|Yes

附加信息:使用selenium和beautifulsoup从网站表中读取输入,但HTML中没有任何内容表明应该存在隐形或其他模糊字符;它始终完全相同。

1 个答案:

答案 0 :(得分:1)

正则表达式中的(0[1-9]|1[012])部分与0012的数字匹配,即

将其替换为(0[1-9]|[12][0-9]|3[01])

  • ( - 分组构造开始
    • 0[1-9] - 0109
    • | - 或
    • [12][0-9] - 1029
    • | - 或
    • 3[01] - 3031

这样,您将匹配,从0131