我有很多 String
,比如:
String str = "camera+app,mountain,lord+kelvin,man,square+format,+-+,sea,e2";
我想创建一个新的 String
,它:
- 将所有标点符号替换为单个空格,
- 单词也将大于或等于 3 个字符
期望的输出应该是:
camera app mountain lord kelvin man square format sea
,所以我认为正则表达式可以解决问题。
我试过了
Pattern pattern = Pattern.compile("(?\\p{Punct})?([\\w]]{3,}*)(?\\p{Punct})?");
Matcher matcher = pattern.matcher(str);
int i = 1;
if(matcher.matches()) {
while(matcher.find()) {
System.out.print(matcher.group(i++) + " ");
}
}
这显然不能正常工作(正如您对这篇文章所期望的那样)。
表达我的观点:
- 我将
(?\\p{Punct})?
作为可选的非捕获标点符号 - 然后
([\\w]]{3,}*)
应该捕获所需的子字符串和 - 最后的
(?\\p{Punct})?
是捕获任何后面的标点符号。
我想这不会处理多个标点符号,但我想稍后再处理。
我总是在使用正则表达式时遇到一些问题,所以我有点卡住了。
当我在 enter link description here 中导入我的正则表达式时我收到一个关于 Unknown inline modifier near index 2
的特殊错误(至少对我而言),它是 \\
。
最佳答案
您的代码无法正常工作,因为您的正则表达式有问题。您可以使用此正则表达式:
\p{Punct}*(\w{3,})\p{Punct}*
另请注意此更正代码:
Pattern pattern = Pattern.compile("\\p{Punct}*(\\w{3,})\\p{Punct}*");
Matcher matcher = pattern.matcher(str);
while(matcher.find()) {
System.out.print(matcher.group(1) + " ");
}
RegEx Demo
关于java - 使用正则表达式替换标点符号并使用最小长度的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26280802/