Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式:在Java8中使用正则表达式_Java_Regex_String - Fatal编程技术网

正则表达式:在Java8中使用正则表达式

正则表达式:在Java8中使用正则表达式,java,regex,string,Java,Regex,String,我想操纵一个字符串,我的字符串是: String string = "dfwx--05-dfpixc3" 我希望我的输出类似于: dfwx--05 dfpixc3 因此,分隔符是-,而不是- 此外,我可以使用Matcher类模式类解决此问题吗?您可以将split与此正则表达式一起使用,如下所示: \b表示锚状插入符号(类似于$和^) 匹配一侧为单词字符的位置(如\w)和 另一面不是单词字符(例如,它可能是 字符串或空格字符的开头) 因为我的字符串是可变的,所以后面总是有一个数字-- 另一

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

 String string = "dfwx--05-dfpixc3"
我希望我的输出类似于:

dfwx--05
dfpixc3
因此,分隔符是
-
,而不是
-


此外,我可以使用Matcher类模式类解决此问题吗?

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

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



因为我的字符串是可变的,所以后面总是有一个数字--

另一个解决方案可以是使用正向查找,如下所示:


您可以使用lookarounds:

(?<!-)-(?!-)
我不知道哪个在线测试仪最适合Java,但请参阅PCRE示例


感谢您访问此特定于Java的测试站点:


为什么不直接使用子字符串呢?因为我的字符串是可变的,所以后面总是有一个数字——您使用“
-
”作为字段分隔符,并且隐式地不允许任何字段本身以“
-
”开头或结尾。也就是说,
dfwx--05
始终是一个字段,不能表示两个字段
dfwx
-05
。我希望这只是一种实践/学习,而不是用于实际数据。:-)请注意,标题应该是有意义的,而不是标准的。我会这样做的关于附加破折号的观点很好。事实上,我个人更喜欢你的答案,而不是YCF。因为它自己处理-角色。在我眼里,这是更清晰的。
String str=“dfwx--05-dfpixc3”;Arrays.stream(str.split(\\b-\\b”).forEach(System.out::println)做得很好。
String[] split = string.split("(?<=\\d)-");
[dfwx--05, dfpixc3]
(?<!-)-(?!-)
string.split("(?<!-)-(?!-)");