正则表达式多行匹配两个字符串

时间:2017-10-03 18:40:33

标签: regex autohotkey

我对RegEx只有粗略的理解,我很难过!

我的文件格式如下:

>>  

    www.google.com  some stuff I don't want
    www.yahoo.com

<<section>>

    www.bing.com
    www.yahoo.com

<<section>>

    www.bing.com
    https://github.com/zeeshanu/learn-regex

以下是我希望匹配的条件:

  • 仅在第一个“&gt;&gt;”之后的行在第一个“&lt;&lt;”之前在它上面
  • 在每行上只选择第一个文本块,在第一个文本
  • 后面没有空格
  • 忽略任何
  • 上的任何初始空格

我已经能够使这个正则表达式选择我想要的那一行:

^([^>>]\s*\S*){1}

但是我不能让它在正确的字符串中工作。

1 个答案:

答案 0 :(得分:2)

您可以使用

(?:\G(?!\A).*\R\h*|^>>\s*)\K\S+

请参阅regex demo。您很可能希望通过i修饰符以不区分大小写的方式匹配模式。

<强>详情

  • (?:\G(?!\A).*\R\h*|^>>\s*) - 匹配上一个匹配(\G(?!\A))的结尾,然后匹配换行符以外的任何0 +字符,尽可能多(.*),然后一行在行的开头打破(\R)然后任何0+水平空格(\h*)或|>>子串,然后是0 +空格( \s*
  • \K - 省略目前为止匹配的文字
  • \S+ - 匹配并返回除空白之外的一个或多个字符。