我有这行代码来删除一些标点符号:
str.replaceAll("[\\-\\!\\?\\.\\,\\;\\:\\\"\\']", "");
我不知道这个正则表达式中的所有字符是否都需要被转义,但我只是为了安全而逃脱。
有没有办法以更清晰的方式构建这样的正则表达式?
答案 0 :(得分:4)
在[
... ]
内,您无需转义字符。例如,[.]
无论如何都没有意义!
规则的例外是
]
因为它会过早关闭整个[...]
表达式。^
如果是第一个字符,则[^abc]
匹配除 abc
以外的所有内容。-
除非它是第一个/最后一个字符,因为[a-z]
匹配a
到z
之间的所有字符。因此,你可以写
str.replaceAll("[-!?.,;:\"']", "")
要将字符串引用到正则表达式中,您还可以使用Pattern.quote
根据需要转义字符串中的字符。
<强>演示:强>
String str = "abc-!?.,;:\"'def";
System.out.println(str.replaceAll("[-!?.,;:\"']", "")); // prints abcdef
答案 1 :(得分:3)
你可能需要转义双引号,因为你的字符串是双引号;但正如aioobe所说,不要逃避其余的事。但是,将-
放在组的末尾。