【问题标题】:regex: given a multiline string, how to match the text included after a specified string positioned at the beginning of each line?正则表达式:给定一个多行字符串,如何匹配位于每行开头的指定字符串之后包含的文本?
【发布时间】:2017-01-25 14:19:20
【问题描述】:

鉴于此多行文本:

abc aaa
bbb abc ccc
abc ddd eee
fff abc

我想将 每行开头的abc 字匹配作为第一个匹配组,其余的文本在下一个之前 abc 定位在行的开头。

所以,这是预期的结果匹配:

Match 1
Full match  `abc aaa
bbb abc ccc`

Group 1.    `abc`
Group 2.    ` aaa
            bbb abc ccc`

Match 2
Full match  `abc ddd eee
fff abc`

Group 1.    `abc`
Group 2.    ` ddd eee
            fff abc`

我已经尝试过这个正则表达式(带有多行选项):

/^(abc)([\w\s]+)/gm

但是结果是错误的,因为它总共取了文本:

Match 1
Full match  `abc aaa
bbb abc ccc
abc ddd eee
fff abc`

Group 1.    `abc`
Group 2.    ` aaa
bbb abc ccc
abc ddd eee
fff abc`

如何更正我的正则表达式以获得预期结果?

请注意,单词“abc”也可以与字符串的其余“内部段”进行比较。

提前致谢。

【问题讨论】:

    标签: regex string pattern-matching match word


    【解决方案1】:

    使用

    /^(abc\b)(.*(?:\r?\n(?!abc\b).*)*)/gm
    

    regex demo

    详情

    • ^ - 行首
    • (abc\b) - 一个完整的单词abc(如果您不需要完整的单词,请删除\b
    • (.*(?:\r?\n(?!abc\b).*)*) - 第 2 组捕获
      • .* - 以abc 开头的行的其余部分
      • (?:\r?\n(?!abc\b).*)* - 0+ 序列:
        • \r?\n(?!abc\b) - 后面没有abc 的换行符
        • .* - 当前行的其余部分。

    【讨论】:

      猜你喜欢
      • 2021-07-08
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-21
      相关资源
      最近更新 更多