【问题标题】:Capturing repeated word sequence捕获重复的单词序列
【发布时间】:2014-03-22 20:41:35
【问题描述】:

在 Perl 中,匹配下面的正则表达式 a11ag22gx33x 这样的文本模式可以正常工作

  ([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

Regex101 Demo

另外,请解释为什么上述正则表达式无法捕获所需的文本模式!!!

编辑

还有一个复杂的问题:

假设模式类似于

[words][space][numbers][space][words][space][numbers]
#assume all [numbers] and [word] are same

....所以在最后一个[numbers] 的情况下,[space] 没有遵循,那么如何过滤...因为正则表达式组捕获如下:

([0-9]*\s) 如果重复,肯定无法捕获最后一部分,并且

([0-9]*) 如果重复,将无法捕获中间部分! ?? Regex 101

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    您的问题是您的正则表达式最后需要一个空格,因为您已在捕获中包含该空格。

    试试吧:

    ([a-zA-Z]+)\s([0-9]+)\s\g1\s\g2
    

    【讨论】:

    • 我真是太傻了……好吧,检查一下:regex101.com/r/zN1tR9,我已经删除了\s,后面跟着单词……那我该如何匹配字符串呢?假设该模式类似于[words][space][numbers][space][words][space][numbers] ....so 在最后一个[number] 情况下,空格不跟随,那么如何过滤??
    • @NoobEditor:在这种情况下,您不允许在数字后有空格。 ([a-zA-Z]*\s)([0-9]*)\s\g1\g2 工作正常。
    • 我的疑问在于([a-zA-Z]*\s)([0-9]*)\s\g1\g2,我们有2个\s,一个来自第一个捕获组,第二个来自\s\g1\g2 ...如何将这两个用于匹配?我的意思是..\s\g1\g2 表示g1g1 之间的空格,这将在[a-zA-Z]* 之后产生2 个空格...不是吗?
    【解决方案2】:

    ([0-9]*\s) = 101 带空格

    所以\g2101 不匹配,因为它的末尾没有任何空格。

    更新:工作正则表达式 ([a-zA-Z]*\s)([0-9]*)\s\g1\g2 用于输入 abcd 101 abcd 101

    Online Demo

    更多示例:

    ([a-zA-Z]*\s)     ([0-9]*)       \s         \g1          \g2
       abcd+space        101        Space       abcd+space    101
    

    【讨论】:

    • 我真是太傻了……好吧,检查一下:regex101.com/r/zN1tR9,我已经删除了\s,后面跟着单词……那我该如何匹配字符串呢?假设该模式类似于[words][space][numbers][space][words][space][numbers] ....so 在最后一个[number] 情况下,空格不跟随,那么如何过滤??
    • @NoobEditor abcd 101abcd 101 之间有一个空格。但是\g1\g2 之间没有空格。在\g1\g2 之间放置一个\s 就可以了!
    • @NoobEditor \s 位于 \g1\g2 之前 :-) 因为两个重复组 g1g2 g1g2 之间有空格。
    • 我在处理捕获组时很摸索!! :\
    • 是的,当然regex101.com/r/nT8iS1,如果您阅读链接底部文字中的说明,它将帮助您更快地学习!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多