我有以下字符串:
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号位。而不是'第三方软件'我得到'第三方软件'。关于如何保持这个数字的任何建议?
谢谢。
当你使用[^>]
时,你匹配任何char,但是&
,g
,t
和;
,因为[^...]
是一个否定的字符类构造。
您可以匹配数字和>
部分,然后匹配并捕获您需要的内容:
/\d+>\s*([^\s.),-]+\s{0,3}((?:\s{0,3}\S+)*))/
细节
\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 +非空白字符。