正则表达式多行匹配两个字符串之间行的第一部分
Regex multiline match first part of lines between two strings
我对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
以下是我希望匹配的条件:
- 只有第一个“>>”之后和第一个“<<”之前的行就可以了
- select 每行只有第一个文本块,第一个文本
之后白色space 后面没有文本
- 忽略任何初始白色space 如果有
我已经能够将这个正则表达式 select 我想要的行的一部分:
^([^>>]\s*\S*){1}
但我无法让它在适当的字符串中工作。
您可以使用
(?:\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+
- 并匹配 return 除了空格之外的 1 个或多个字符。
我对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
以下是我希望匹配的条件:
- 只有第一个“>>”之后和第一个“<<”之前的行就可以了
- select 每行只有第一个文本块,第一个文本 之后白色space 后面没有文本
- 忽略任何初始白色space 如果有
我已经能够将这个正则表达式 select 我想要的行的一部分:
^([^>>]\s*\S*){1}
但我无法让它在适当的字符串中工作。
您可以使用
(?:\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+
- 并匹配 return 除了空格之外的 1 个或多个字符。