我对正则表达式只有粗略的了解,我被难住了!
我的文件格式如下:
>>
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
以下是我希望满足的条件:
- 仅包含第一个“>>”之后和第一个“<<”之前的行
- 仅选择每行的第一个文本 block ,第一个文本后的空白后面没有文本
- 忽略行中的任何初始空格(如果有)
我已经能够使用这个正则表达式来选择我想要的行的部分:
^([^>>]\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+
- 匹配并返回除空格之外的 1 个或多个字符。
关于正则表达式多行匹配两个字符串之间的行的第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46551321/