Regex 正在提取两个关键字或一个关键字之间的文本,并且\n
我有一组行,其中大多数都遵循这种格式Regex 正在提取两个关键字或一个关键字之间的文本,并且\n,regex,Regex,我有一组行,其中大多数都遵循这种格式 STARTKEYWORD some text I want to extract ENDKEYWORD\n 我想找到这些行并从中提取信息 请注意,关键字之间的文本可以包含多种字符(拉丁和非拉丁字母、数字、空格、特殊字符),但\n除外 ENDKEYWORD是可选的,有时可以省略 我的尝试是围绕这个正则表达式 STARTKEYWORD (.+)(?:\n| ENDKEYWORD) 但是,捕获组(.+)会消耗尽可能多的字符,并使用我不需要的ENDKEYWORD
STARTKEYWORD some text I want to extract ENDKEYWORD\n
我想找到这些行并从中提取信息
请注意,关键字之间的文本可以包含多种字符(拉丁和非拉丁字母、数字、空格、特殊字符),但\n
除外
ENDKEYWORD
是可选的,有时可以省略
我的尝试是围绕这个正则表达式
STARTKEYWORD (.+)(?:\n| ENDKEYWORD)
但是,捕获组(.+)
会消耗尽可能多的字符,并使用我不需要的ENDKEYWORD
有没有办法只使用正则表达式来获取一些我想提取的文本?你可以通过添加?
和添加$
而不是\n
来提高效率,从而使(++)不贪婪(默认情况下是贪婪的,会吃掉任何阻碍它的东西)
STARTKEYWORD (.+?)(?:$| ENDKEYWORD$)
如果您特别想要\n
,可以使用:
STARTKEYWORD (.+?)(?:\n| ENDKEYWORD\n)
请参见您可以使用基于前瞻的正则表达式。最好使用
$
行尾定位符,因为最后一行不包含换行符
STARTKEYWORD (.+?)(?= ENDKEYWORD|$)
或
为'STARTKEYWORD'提供误报我想提取的一些文本在这里?它起作用了。OP只想在包含ENDKEYWORD字符串的情况下将文本提取到
ENDKEYWORD
,否则他想捕获整行。“误报”。。。它匹配的不仅仅是ENDKEYWORD…:)@AvinashRaj虽然在我当前的设置中不可能获得这样的字符串,但处理它们也很好。@AvinashRaj我的意思是,如果正则表达式匹配STARTKEYWORD
和ENDKEYWORD\n
或\n
之间的所有文本,那就太好了。您也可以使用STARTKEYWORD(+?)(?:ENDKEYWORD)?$
。
STARTKEYWORD (.+?)(?: ENDKEYWORD|$)