在两个关键字或关键字之间提取文字并\ n

时间:2015-04-25 16:42:38

标签: regex

我有一组行,其中大多数都遵循这种格式

STARTKEYWORD some text I want to extract ENDKEYWORD\n

我想找到这些行并从中提取信息。

请注意,关键字之间的文字可以包含多种字符(拉丁字母和非拉丁字母,数字,空格,特殊字符),但\n除外。

ENDKEYWORD是可选的,有时可以省略

我的尝试围绕着这个正则表达式

STARTKEYWORD (.+)(?:\n| ENDKEYWORD)

但是,捕获组(.+)会占用尽可能多的字符,并且需要ENDKEYWORD这些我不需要的字符。

有没有办法让some text I want to extract单独使用正则表达式?

2 个答案:

答案 0 :(得分:1)

你可以通过添加?并添加$代替\n来使(。+)非贪婪(默认情况下是贪婪的并且吃掉其中的任何东西)以获得更多高效

STARTKEYWORD (.+?)(?:$| ENDKEYWORD$)

如果您特别想要\n,可以使用:

STARTKEYWORD (.+?)(?:\n| ENDKEYWORD\n)

请参阅DEMO

答案 1 :(得分:1)

您可以使用基于前瞻性的正则表达式。最好使用$行锚点结束,因为最后一行不会在最后一行包含换行符。

STARTKEYWORD (.+?)(?= ENDKEYWORD|$)

OR

STARTKEYWORD (.+?)(?: ENDKEYWORD|$)

DEMO