rrr*_*rrr 6 regex search jmeter cpu-word
我一直在环顾四周,无法实现这一目标.我不是完全的菜鸟.
我需要通过(包括)不包含START的START和END来分隔文本.基本上我找不到一种方法来否定整个单词而不使用高级的东西.
示例字符串:
abcSTARTabcSTARTabcENDabc
预期结果:
STARTabcEND
不好:
STARTabcSTARTabcEND
我不能使用向后搜索的东西.我在这里测试我的正则表达式:www.regextester.com
谢谢你的建议.
ste*_*ema 10
试试这个
START(?!.*START).*?END
Run Code Online (Sandbox Code Playgroud)
看到它在网上的Regexr
(?!.*START)是一个负面的先行.它确保不跟随单词"START"
.*?是所有角色的非贪婪匹配,直到下一个"结束".它需要,因为负向前瞻只是向前看并且没有捕获任何东西(零长度断言)
更新:
我想了一下,上面的解决方案是匹配到第一个"结束".如果不想这样做(因为你要从内容中排除START),那就使用贪婪的版本
START(?!.*START).*END
Run Code Online (Sandbox Code Playgroud)
这将匹配到最后一个"结束".
START(?:(?!START).)*END
Run Code Online (Sandbox Code Playgroud)
将适用于任意数量的START...END对。在 Python 中演示:
>>> import re
>>> a = "abcSTARTdefENDghiSTARTjlkENDopqSTARTrstSTARTuvwENDxyz"
>>> re.findall(r"START(?:(?!START).)*END", a)
['STARTdefEND', 'STARTjlkEND', 'STARTuvwEND']
Run Code Online (Sandbox Code Playgroud)
如果您只关心START和之间的内容END,请使用:
(?<=START)(?:(?!START).)*(?=END)
Run Code Online (Sandbox Code Playgroud)
在这里看到它:
>>> re.findall(r"(?<=START)(?:(?!START).)*(?=END)", a)
['def', 'jlk', 'uvw']
Run Code Online (Sandbox Code Playgroud)
真正行人的解决方案是START(([^S]|S*S[^ST]|ST[^A]|STA[^R]|STAR[^T])*(S(T(AR?)?)?)?)END。现代正则表达式风格有负面断言,可以更优雅地做到这一点,但我将您对“向后搜索”的评论解释为可能意味着您不能或不想使用此功能。
更新:为了完整起见,请注意上面的内容对于结束分隔符是贪婪的。要仅捕获尽可能短的字符串,请扩展否定以覆盖结束分隔符 -- START(([^ES]|E*E[^ENS]|EN[^DS]|S*S[^STE]|ST[^AE]|STA[^RE]|STAR[^TE])*(S(T(AR?)?)?|EN?)?)END。不过,在大多数文化中,这有可能超出酷刑阈值。
错误修复:此答案的先前版本有一个错误,因为它SSTART可能是匹配的一部分(第二个S将匹配[^T],等等)。我修复了这个问题,但通过添加Sin并在非可选之前[^ST]添加,以允许任意重复其他内容。S*SS