java - 使用正则表达式替换标点符号并使用最小长度的单词

标签 java regex

我有很多 String,比如:

String str = "camera+app,mountain,lord+kelvin,man,square+format,+-+,sea,e2";

我想创建一个新的 String,它:

  1. 将所有标点符号替换为单个空格,
  2. 单词也将大于或等于 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/

相关文章:

java - 正则表达式提取两个给定字符串之间最后一次出现的文本

java - C# 和 Java - 将文件从 Android 上传到 WCF

Python正则表达式匹配unicode表情符号

java - 用于查找字符串第一次出现的后缀的正则表达式

java - HashMap 比较

Javascript - 使用变量 RegExp 来匹配数据数组中的多个关键字

regex - 用于在 Notepad++ 中将空格更改为制表符的正则表达式

java string to char array 和 inverse 导致错误的结果

java - 从 HashMap 返回 List 还是将 List 保留在内存中更好?

java - 访问部署在远程 JBoss AS 上的 JBoss Cache (4.2.2)