gpt4 book ai didi

正则表达式可选组解析

转载 作者:行者123 更新时间:2023-12-01 09:47:22 25 4
gpt4 key购买 nike

几个小时以来一直在摆弄这个......

我正在尝试解析这种形式的错误消息:

[error]  C:\Me\MyPath\myFile.scala:18:22: not found: value getaa

我可以使用以下正则表达式很好地做到这一点:

\[(error|warn)\]\s+(.+):(\d+):(?:\d+:)\s+(.+)$

正确生成组:

error
C:\Me\MyPath\myFile.scala
18
not found: value getaa

但为了使其更健壮,我需要将 22: 部分设为可选(因为某些版本的 scala 编译器不输出列号)。换句话说,它也需要为这个字符串生成与上面相同的组:

[error]  C:\Me\MyPath\myFile.scala:18: not found: value getaa

我试过在可选组后面加上一个问号,但这不起作用——它弄乱了原来的组。我假设有一些关于懒惰与贪婪的东西我不理解。 Here is a working sample在正则表达式 101 上。感谢您的帮助。

最佳答案

需要加两个问号:

\[(error|warn)\]\s+(.+?):(\d+):(?:\d+:)?\s+(.+)$
^ ^

查看 regex demo

.+? 将匹配除换行符以外的任何 1+ 个字符尽可能少,因此匹配到子模式的第一次出现跟随。第二个 ? 将使 (?:\d+:) 组可选。

完整的模式细节

  • \[ - 一个 [
  • (error|warn) - 两个子字符串之一(errorwarn)
  • \] - 或者只是 ] - 一个 ] 字符
  • \s+ - 1+ 个空格
  • (.+?) - 除换行字符外的任何 1+ 个字符,尽可能少,直到第一个...
  • : - 冒号
  • (\d+) - 第 2 组:一个或多个数字
  • : - 冒号
  • (?:\d+:)? - 一个非捕获组匹配 1 个以上的数字和一个冒号在它们之后 1 次或 0 次
  • \s+ - 1+ 个空格
  • (.+) - 第 3 组:行的其余部分
  • $ - 字符串结尾(注意这里没有必要,因为 .+ 是一个贪婪的子模式)

关于正则表达式可选组解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45824778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com