我正在尝试形成一个正则表达式来匹配起始单词和停止单词列表中第一个之间的文本。但是,我不想在我的比赛中包含停止词。
(用例正在替换文档的一部分,在表示下一部分的关键字之前停止)
我的正则表达式是:
(适用StartWord)[\ S \ S] *?(StopWord1 | StopWord2 | $)
但是,此匹配包括停用词。请参阅此处的示例:http://regexr.com/38pb9
有什么想法?谢谢!
答案 0 :(得分:2)
如果你的正则表达式引擎支持预测,你可以使用它:
((StartWord)[\s\S]*?(?=StopWord1|StopWord2|$))
前瞻性使匹配在遇到停止词或字符串结尾时停止,但实际上并未将其作为匹配的一部分捕获。
如果您还需要排除起始单词,可以使用后面的观察(再次假设您的正则表达式引擎支持它):
((?<=StartWord)[\s\S]*?(?=StopWord1|StopWord2|$))
但当然最简单的方法可能只是使用您现有的模式,但使用一组只提取您需要的部分:
(StartWord)([\s\S]*?)(StopWord1|StopWord2|$)
这里,组1将包含起始单词,组2将包含匹配的主体,组3将包含停止单词。无论您使用何种语言,您都可以提取第2组以获得正文。