需要有关如何修改正则表达式以保持捕获组中的第一个数字的建议

问题描述 投票:0回答:1

我有以下字符串:

3> General Information      34> 3rd Party Software

从这个字符串我需要得到2个匹配,每个匹配2组。 使用这个正则表达式([^\s\.\)\d\-,\>](\s{0,3}[^\s]+)*)我得到以下结果:

Match 1  
Full match  6-25    'General Information'  
Group 1.    6-25    'General Information'  
Group 2.    13-25   ' Information'  
Match 2  
Full match  39-56   'rd Party Software'  
Group 1.    39-56   'rd Party Software'  
Group 2.    47-56   ' Software`  

这是my regex demo fiddle的链接。

但是,我在第二场比赛中错失了3号位。而不是'第三方软件'我得到'第三方软件'。关于如何保持这个数字的任何建议?

谢谢。

regex
1个回答
0
投票

当你使用[^>]时,你匹配任何char,但是>,因为[^...]是一个否定的字符类构造。

您可以匹配数字和>部分,然后匹配并捕获您需要的内容:

/\d+>\s*([^\s.),-]+\s{0,3}((?:\s{0,3}\S+)*))/

regex demo

细节

  • \d+ - 1+位数
  • > - 一个子串
  • \s* - 0+空白字符
  • ([^\s.),-]+\s{0,3}((?:\s{0,3}\S+)*)) - 第1组: [^\s.),-]+ - 任何字符,但空白,.),- \s{0,3} - 0到3次出现空白字符 ((?:\s{0,3}\S+)*) - 第2组匹配0次或更多次连续出现 \s{0,3} - 0到3次出现空白字符 \S+ - 1 +非空白字符。
© www.soinside.com 2019 - 2024. All rights reserved.