正则表达式捕获行尾部分

4
我有一个正则表达式可以捕获以下表达式。现在我需要添加“something”到我的正则表达式中,以将其余字符串捕获为一组。因此,XPT将是第1组,123A将是第2组,“I AM VERY HAPPY”将是第3组。这是我的正则表达式(也在http://regexr.com/4mocf):

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

编辑: 我不想给我的组命名(进行编辑,因为有些人认为它是另一个问题的重复)


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

2
只需在您的正则表达式末尾添加以下后缀即可捕获其余部分:
(?<rest>.+)?$

3
为什么这么复杂?为什么不只用(.*)$呢? - m0skit0

2
假设第三组是可选的,您可以使用
^([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个或多个空格字符。

请参见正则表达式演示

详细信息

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

1
很好的解释,谢谢! - Walucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接