正则表达式:在 Java 8 中使用正则表达式

CHA*_*aad 3 java regex string

我想操作一个字符串,我的字符串是:

 String string = "dfwx--05-dfpixc3"
Run Code Online (Sandbox Code Playgroud)

我希望我的输出是这样的:

dfwx--05
dfpixc3
Run Code Online (Sandbox Code Playgroud)

所以分隔符是-和不是--

此外,我可以使用 Matcher 类 Pattern 类来解决这个问题吗?

YCF*_*F_L 7

您可以将 split 与此正则表达式\b-\bWord Boundaries 一起使用,如下所示:

\b表示像插入符号这样的锚(它类似于$^)匹配一侧是单词字符(如\w)而另一侧不是单词字符(例如它可能是字符串的开头或空格字符)的位置。

String[] split = string.split("\\b-\\b");
Run Code Online (Sandbox Code Playgroud)

因为我的字符串是可变的 后面总是有一个数字——

另一种解决方案可能是使用正向后视,如下所示(?<=\d)-

String[] split = string.split("(?<=\\d)-");
Run Code Online (Sandbox Code Playgroud)

输出

[dfwx--05, dfpixc3]
Run Code Online (Sandbox Code Playgroud)


Mon*_*eus 5

您可以使用环视:

(?<!-)-(?!-)
Run Code Online (Sandbox Code Playgroud)
  • (?<!-) - 确保前面的字符不是破折号
  • - - 确保我们正在查看一个破折号
  • (?!-) - 确保以下字符不是破折号

如果我没记错的话,代码应该是:

string.split("(?<!-)-(?!-)");
Run Code Online (Sandbox Code Playgroud)

我不知道哪种在线测试仪最适合 Java,但请参阅https://regex101.com/r/LVXDdH/1以获取 PCRE 示例。


感谢JGFMK提供此 Java 特定测试站点:

https://repl.it/repls/ImpressionableBronzeMice