我试图创建一个正则表达式,它可以识别文本中包含特定单词的句子-在本例中为“JavaScript”。我的方法是提取句子前面的部分,然后将句子从文本的其余部分中分离出来。
为了得到前面的部分,我使用了这个正则表达式:
.*\.\s(?=.*?JavaScript)
这和预期的一样。lookaheadAssert查找不包括包含“JavaScript”的句子的最长前面部分。我在Assert中使用了非贪婪模式,在匹配中使用了贪婪模式,这似乎适合于查找最长的部分。
为了从文本的其余部分获取句子,我使用了这个正则表达式:
(?<=(.*\.\s(?=.*?JavaScript))).*?\.\s
然而,我发现由lookbehindAssert标识的前面部分与第一步的结果不同,尽管两者使用完全相同的正则表达式。看起来好像同时选择了前面部分的不同长度。
我想知道我的方法出了什么问题。
这是我在屏幕截图中使用的文本。第三句话是应该摘录的。
Edit the Expression & Text to see the matches.
Roll over matches or the expression for details.
PCRE & JavaScript flavors of RegEx are supported.
Validate your expression with Tests mode.
1条答案
按热度按时间9wbgstp71#
不清楚你的输入是一行还是多行,所以这里有一个解决方案来提取任何包含“JavaScript”的句子:
https://regex101.com/r/FECt9n/1