我有一组行,其中大多数都遵循这种格式
STARTKEYWORD some text I want to extract ENDKEYWORD\n
我想找到这些行并从中提取信息。
请注意,关键字之间的文字可以包含多种字符(拉丁字母和非拉丁字母,数字,空格,特殊字符),但\n
除外。
ENDKEYWORD
是可选的,有时可以省略。
我的尝试围绕着这个正则表达式
STARTKEYWORD (.+)(?:\n| ENDKEYWORD)
但是,捕获组(.+)
会占用尽可能多的字符,并且需要ENDKEYWORD
这些我不需要的字符。
有没有办法让some text I want to extract
单独使用正则表达式?
答案 0 :(得分:1)
你可以通过添加?
并添加$
代替\n
来使(。+)非贪婪(默认情况下是贪婪的并且吃掉其中的任何东西)以获得更多高效
STARTKEYWORD (.+?)(?:$| ENDKEYWORD$)
如果您特别想要\n
,可以使用:
STARTKEYWORD (.+?)(?:\n| ENDKEYWORD\n)
请参阅DEMO
答案 1 :(得分:1)
您可以使用基于前瞻性的正则表达式。最好使用$
行锚点结束,因为最后一行不会在最后一行包含换行符。
STARTKEYWORD (.+?)(?= ENDKEYWORD|$)
OR
STARTKEYWORD (.+?)(?: ENDKEYWORD|$)