【问题标题】:Regex to Capture rest of the line正则表达式捕获行的其余部分
【发布时间】:2020-02-10 10:20:29
【问题描述】:

我有一个捕获以下表达式的正则表达式

XPT 123A

现在我需要在我的正则表达式中添加“某物”以将剩余的字符串捕获为一个组

XPT 123A I AM VERY HAPPY

所以XPT 将是第 1 组、123A 第 2 组和 I AM VERY HAPPY 第 3 组。

这是我的正则表达式(也在这里http://regexr.com/4mocf):

^([A-Z]{2,4}).((?=\d)[a-zA-Z\d]{0,4})

编辑: 我不想为我的小组命名(编辑 b/c 有些人认为这是另一个问题的重复)

【问题讨论】:

  • 从你的例子我猜1)只使用大写字母,2)第二组总是以数字开头并且没有空格,这是正确的吗?如果不是,您需要为每个组指定您的要求。
  • ^([A-Z]{2,4}) (\d[a-zA-Z\d]{0,3})(?: (.*))?$?第 3 组是可选的吗?
  • @m0skit0 是的!
  • @WiktorStribiżew 谢谢!我可以接受你的回答

标签: regex


【解决方案1】:

只需将以下后缀添加到您的正则表达式即可捕获该行的其余部分:

(?<rest>.+)?$

【讨论】:

  • 为什么这么复杂?为什么不只是(.*)$
【解决方案2】:

假设第 3 组是可选的,您可以使用

^([A-Z]{2,4}) (\d[a-zA-Z\d]{0,3})(?: (.*))?$
^([A-Z]{2,4})\s+(\d[a-zA-Z\d]{0,3})(?:\s+(.*))?$

\s+ 匹配任何 1+ 个空白字符。

请参阅regex demo

详情

  • ^ - 字符串开头
  • ([A-Z]{2,4}) - 第 1 组:两个、三个或四个大写 ASCII 字母
  • \s+ - 1+ 个空格
  • (\d[a-zA-Z\d]{0,3}) - 第 2 组:一个数字后跟 0 个或多个字母数字字符
  • (?:\s+(.*))? - 一个可选的非捕获组,匹配 1 次或 0 次出现:
    • \s+ - 1+ 个空格
    • (.*) - 第 3 组:尽可能多的除换行符以外的任何 0+ 字符
  • $ - 字符串结束

【讨论】:

  • 很好的解释,谢谢!
猜你喜欢
  • 2022-12-09
  • 2018-11-20
  • 2018-03-20
  • 2016-03-03
  • 2020-10-24
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多