python - 正则表达式匹配一些子字符串,同时忽略看似相同的子字符串?

标签 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 中没有任何内容表明应该存在不可见或其他模糊字符;整个过程都是一模一样的。

最佳答案

正则表达式中的 (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

关于python - 正则表达式匹配一些子字符串,同时忽略看似相同的子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43009550/

相关文章:

Java 哈希密码不匹配

python - 按子字符串标准过滤 pandas DataFrame

python - 使用多个输入测试 Click 应用程序提示

python - 在 Tensorflow/Keras 中获取对称矩阵的上三角最有效的方法是什么?

python - Nginx WebSocket 代理不断获取 HTTP 301 重定向

python - 从 python 字典创建边缘列表

javascript - 如何使用正则表达式或javascript验证文件夹路径?

javascript - 如何提取javascript中的特殊键?

string - 使用通配符替换 PowerShell 字符串

java - 如何从不明确的模式中提取子字符串