正则表达式 - 匹配Java / Scala字符串中单词末尾的标点符号

时间:2014-11-05 16:21:22

标签: java regex scala

我在此链接上有此正则表达式示例:http://regexr.com/39rr0

文字输入:
     1. This camera support Monochrome, Neutral, Standard, Landscape and Portrait!

使用此正则表达式替换字符串时的预期输出:
     1 This camera support Monochrome Neutral Standard Landscape and Portrait

我试图删除单词之后的标点符号,所以我只得到没有它的单词。 我的正则表达式是(([\S]+)(,|:|;|\?|!)),它在该正则表达式编辑器中匹配得很好。但是当我string.replace( (([\S]+)(,|:|;|\?|!)), "")甚至string.find( (([\S]+)(,|:|;|\?|!)) )时,它什么也没找到。

正则表达式是做什么的?我的正则表达式被破坏了还是我错误地使用了它。

3 个答案:

答案 0 :(得分:3)

您无法使用String.replace,它只会替换文字。

尝试更简单的PatternString.replaceAll

System.out.println(
    "1. This camera support Monochrome, Neutral, Standard, Landscape and Portrait!"
    .replaceAll("\\p{Punct}", "")
);

<强>输出

1 This camera support Monochrome Neutral Standard Landscape and Portrait

注意

如果您只需要在单词字符(字母数字)后面替换标点符号,则可以改进Pattern

"(?<=\\w)\\p{Punct}+"

在您的情况下,它将产生相同的输出。

答案 1 :(得分:3)

使用\\p{P}匹配所有标点符号。

String str = "1. This camera support Monochrome, Neutral, Standard, Landscape and Portrait!";
System.out.println(str.replaceAll("\\p{P}(?=\\s|$)", ""));

<强>输出:

1 This camera support Monochrome Neutral Standard Landscape and Portrait

<强>解释

  • \\p{P}匹配所有标点符号
  • (?=\\s|$)仅当它后面跟着一个空格或行锚的一端。

答案 2 :(得分:3)

使用replaceAll,它适用于regexp

System.out.println("This camera support Monochrome, Neutral, Standard, Landscape and Portrait!".replaceAll("([\\S]+)(,|:|;|\\?|!)", "$1"));

打印:

This camera support Monochrome Neutral Standard Landscape and Portrait