我在此链接上有此正则表达式示例: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]+)(,|:|;|\?|!)) )
时,它什么也没找到。
正则表达式是做什么的?我的正则表达式被破坏了还是我错误地使用了它。
答案 0 :(得分:3)
您无法使用String.replace
,它只会替换文字。
尝试更简单的Pattern
和String.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