我想使用正则表达式来获取文本中的关键字列表。如果文字说
This is a random text Keywords a, b, c Hi stack overflow
要么
Hi stackoverflow Keywords: a, b, Stack Overflow Some more text
我想提取
a, b, c
和
a, b, Stack Overflow
我尝试了以下正则表达式:
.*?(?:Keywords:?\s)(.*?,.*?,.*?(?<!,)(?=\s[A-Z])){1,2}.*?$
DEMO:https://regex101.com/r/JKfFLl/9
但是我没有得到第二个字符串的“溢出”部分。我在代码中添加{1,2}
的原因是为了确保它还捕获由2个单词组成的关键字,但它不起作用。
答案 0 :(得分:0)
基于对OP和这个答案的评论;此正则表达式捕获任意数量的,./;
分隔关键字,可能包含1或2个单词
https://regex101.com/r/IHPCuN/5
^.*?(?:Keywords(?::|-|--)?)\K((?:(?:\s\w+){1,2}[,.;|])+(?:\s\w+){1,2}).*$
这会在列表的末尾捕获1或2个单词,但在列表末尾与文本的其余部分之间没有任何区别,这将始终捕获2个单词。
注意:\K
并非特别必要,但会提高效果。