【发布时间】:2017-11-02 17:09:48
【问题描述】:
我有一个从大型 PDF 文件中提取的文本。我只对本文的一部分感兴趣。我只需要存在于 2 个test 子字符串之间的部分,并且它有 1 次或多次出现特定单词 XX12QW。在这 2 个test 子字符串/单词中,第一个可以包含在匹配中,如下面所需的输出所示
输入字符串:
test
abc def
test 123
test pqr
XX12QW
jkl XX12QW hjas
12asd23 test bxs
期望的输出:
test pqr
XX12QW
jkl XX12QW hjas
12asd23
注意事项:
- 子字符串
test多次出现。 - 我只需要 2 个子字符串/单词之间的部分 -
test,其中包含 1 次或多次出现的单词XX12QW。这个词XX12QW根本不会出现在词 -test的任何其他 对之间。也就是说,永远不会有这样的情况:test abc XX12QW test isadkj XX12QW test an test - 如果
XX12QW出现在test和$(End of string/file)之间,则需要一个额外的测试用例:- 输入:
test absjh123 sjnc test jhsd32 test aabb XX12QW asdj XX12QW sdfk - 所需输出:
test aabb XX12QW asdj XX12QW sdfk
- 输入:
我在这个问题上卡了很长时间,真的需要其他人来看看。
正则表达式:test[\s\S]*?XX12QW[\s\S]*?(?=test)
非常感谢任何帮助。
【问题讨论】:
-
假设
test在以 open tag 之类的方式使用时始终是字符串中的第一个,您可以将test(?!.*^test)(?=.*XX12QW).+(?=test)与sm修饰符一起使用,如 show @ 987654322@。另一种选择是使用.*(test(?=.*XX12QW).+(?=test)),它将结果存储到捕获组中,这将只匹配最后一次出现,所以假设你有多次出现,这将失败 -
@ctwheels 非常感谢。到目前为止看起来不错。你能把它作为答案发布吗?
-
我相信解决这个问题的最好方法是使用
test.+?(?=\s*test|$)(带有gs修饰符)然后检查哪些匹配项包含XX12QW。 -
@Gurman 你有时间检查我的回答吗?如果没用,我就删了。
标签: javascript regex jscript