正则表达式排除匹配

时间:2016-11-15 20:05:05

标签: java regex regex-negation

我有以下字符串: word_word2_word3_word4

我的意图是只提取'test2'。使用_\w*?_作为字符串匹配,我可以将' word2 '作为匹配,但我看不到删除这些下划线以仅匹配'word2'的方法。

我不能使用.split()或类似的东西,只能使用Regex收集此值。

你建议你做些什么修改?

3 个答案:

答案 0 :(得分:3)

您还可以使用正向前瞻和后瞻

(?<=_)\w*2(?=_)

  

我的意图是只提取&#39; test2&#39;。使用 \ w *?作为字符串匹配,我可以得到&#39; word2&#39;匹配,但我无法找到一种方法来删除那些下划线,只匹配&#39; word2&#39;。

下划线不会是加工线的一部分,但会在它之前和之后

编辑:

更进一步,如果匹配字符串位于整个文本的开头或结尾,则不会被下划线包围。

(?<=_|^)[^_]*2(?=_|$)

这个,在这种特定情况下可选择使用下划线。

online test

答案 1 :(得分:1)

您的问题并不完全清楚,但假设word2word3等是不包含_的任意字词,您可以使用捕获组提取要提取的字符的子集。例如:

\w*_(\w*)_\w*_\w*

匹配您的字符串,第一个(也是唯一的)捕获组提取第二个字。也许*应为+,具体取决于您是否要接受零大小的字词。

答案 2 :(得分:0)

如果您不担心性能,只需删除匹配的第一个和最后一个字符,就可以快速而肮脏地执行此操作。