【问题标题】:Regular expression to match between two strings? [duplicate]正则表达式匹配两个字符串? [复制]
【发布时间】:2018-09-19 18:31:56
【问题描述】:

正则表达式匹配日期和右方括号之间的所有内容:

2018-09-19 15:15:27,272 - AppLog - INFO -
        ******************************************
        Log Report - Consume Cycle BWYgqW-ConsumeCycle
        ******************************************
        Uptime: 11723.089329242706s
        Jobs Run: 281098
        Jobs Current: 75
        Q Avg Read Time: 0.014049809202426435
        Q Msgs Read: 5347
        Worker Load: ['0.92', '0.95', '0.99']
        ******************************************

2018-09-19 15:16:42,089 - AppLog - INFO -
        ******************************************
        Log Report - Consume Cycle eehEes-ConsumeCycle
        ******************************************
        Uptime: 11710.040764093399s
        Jobs Run: 287010
        Jobs Current: 75
        Q Avg Read Time: 0.006846889048917865
        Q Msgs Read: 6649
        Worker Load: ['0.99', '0.99', '0.98']
        ******************************************

我尝试了许多正则表达式来匹配 date(2018-09-19) 和右方括号 ](包括)。 日期也会随着年份而变化。

(我知道这是一个重复的问题,但我为此苦苦挣扎)

【问题讨论】:

  • 您是否尝试过在 regex101.com 之类的在线正则表达式测试器上优化您的模式?向我们展示您的模式,也许我们可以指出它需要什么。
  • 最简单的方法是使用带有re.DOTALL 标志的\d{4}-\d{2}-\d{2}(.*\]),但由于您没有提供预期的输出,我们无法确定。
  • @DeepSpace 你不认为你给的正则表达式会消耗所有其他日期,即在给出的例子中,它只会匹配一次,而实际上有日期块-] 要匹配?
  • @Onyambu 我在 OP 编辑​​问题并添加另一个日期部分之前发布了评论。然而,这可以很容易地在* 之后使用? 修复

标签: python regex python-3.x python-2.7


【解决方案1】:

我认为/[0-9]{4}[\s\S]+?\]/gm 会符合您的要求。

[0-9]{4} 在字符串开头搜索年份,[\s\S]+? 将匹配任何内容,直到第一个 ]

结果是:

Match 1
2018-09-19 15:15:27,272 - AppLog - INFO -
    ******************************************
    Log Report - Consume Cycle BWYgqW-ConsumeCycle
    ******************************************
    Uptime: 11723.089329242706s
    Jobs Run: 281098
    Jobs Current: 75
    Q Avg Read Time: 0.014049809202426435
    Q Msgs Read: 5347
    Worker Load: ['0.92', '0.95', '0.99']

Match 2
Full match  455-857 2018-09-19 15:16:42,089 - AppLog - INFO -
    ******************************************
    Log Report - Consume Cycle eehEes-ConsumeCycle
    ******************************************
    Uptime: 11710.040764093399s
    Jobs Run: 287010
    Jobs Current: 75
    Q Avg Read Time: 0.006846889048917865
    Q Msgs Read: 6649
    Worker Load: ['0.99', '0.99', '0.98']

你可以在Regex101上测试它

[编辑] 删除了 ^ 以将其与 re.findall 一起使用以获取所有匹配项

【讨论】:

  • 这就像一个魅力,除了我必须从正则表达式中删除 ^ 以将其与 re.findall 一起使用以获取所有匹配项
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-16
  • 2015-09-30
  • 2012-09-26
  • 2012-06-05
  • 2013-12-25
相关资源
最近更新 更多