在Perl中,要匹配a11a
之类的文字模式,g22g
,x33x
以下正则表达式可以正常工作
([a-z])(\d)\g2\g1
现在我想匹配类似于上面的重复组,但在
之类的单词之间有空格 abcd 101 abcd 101
(在一个单行正文模式中捕获整个字符串的单行文本或段落)
如何做到这一点......我尝试了下面的模式,但它不会工作
([a-zA-Z]*\s)([0-9]*\s)\g1\g2
#logic is : words followed by space in 1 group and
#numbers followed by space in 2nd group
另外,请解释为什么上述正则表达式无法捕获所需的文本模式!!!
修改
又一个并发症:
假设模式类似于
[words][space][numbers][space][words][space][numbers]
#assume all [numbers] and [word] are same
....所以在上一个[numbers]
案例中,[space]
没有关注,如何过滤然后...因为正则表达式组捕获如下:
([0-9]*\s)
肯定无法捕获最后一部分,
([0-9]*)
将无法捕获中间部分!! ??
Regex 101
答案 0 :(得分:3)
你的问题是你的正则表达式最终需要一个空格,因为你已经将空间包含在捕获中。
尝试改为:
([a-zA-Z]+)\s([0-9]+)\s\g1\s\g2
答案 1 :(得分:1)
([0-9]*\s)
= 101
空格
所以\g2
与101
不匹配,因为它最后没有任何空格。
更新:为输入([a-zA-Z]*\s)([0-9]*)\s\g1\g2
工作正则表达式abcd 101 abcd 101
更多示例:
([a-zA-Z]*\s) ([0-9]*) \s \g1 \g2
abcd+space 101 Space abcd+space 101