【问题标题】:Regular expressions matching text between two strings正则表达式匹配两个字符串之间的文本
【发布时间】:2022-01-22 04:09:21
【问题描述】:

有点像编码和从事个人项目以了解更多信息的初学者。我将一些个人陈述转换为文本,并尝试同时进行回顾和展望。我有一大段文本,格式如下:

> dec 15 dec 16 transaction info#1 ab74537812345678951843053$16.94
\ndec 16 dec 17 transaction info#2 cd74500123456789617492488$56.50

我正在尝试查找所有匹配项,它会在第一个日期之后和 20 位以上的长字符串之前选择所有匹配项。例如对于第一行,它将匹配:

交易信息#1 ab

这是我目前拥有的当前表达式,它与我正在寻找的匹配,但它也匹配一堆空白:(?<=.{14})(?:.*?)(?=\d{23,})。我想我可以通过一些额外的编码删除 findall 列表中出现的空白,但不确定这是最有效的方法。

【问题讨论】:

    标签: python python-re lookbehind


    【解决方案1】:

    在这种情况下,我倾向于匹配整行,并使用组来选择我真正想要的。 这是您在 regex101

    上提供的示例输入

    使用您提供的示例,我想出了以下表达式来实现该目的:

    ^(?:(?:[a-z]{3}\s*[0-9]{1,2}\s*){2})(.*)(?:[0-9]{23}\$.*)$
    

    这是使用全局 (g) 和多行 (m) 标志,以便返回所有匹配项并捕获多行。

    这利用非捕获组来隔离您实际要阅读的行部分。此外,通过使用“字符串开头”和“字符串结尾”标记 (^ ... $),任何与整个模式不匹配的行都将根本不匹配。

    根据您的示例,此模式匹配两行,每行中的第一个捕获组如下:

    transaction info#1 ab
    transaction info#2 cd
    

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多