我需要从文本中排除所有符号,除了字母、空格和独立撇号(如:“'”或“this ' is”),但如果撇号是单词的一部分(如:“word'”或“那是”或“'字”)。我尝试了 String.replaceAll("[^a-z'\\s]","")方法,似乎我需要添加类似的东西[^([a-z]*'[a-z]+|[a-z]+'[a-z]*)],但我无法做出完整的表达,而且表达的第二部分似乎无效。
感谢帮助!
您可以使用
s.replaceAll("[^a-zA-Z\\s']|(?<!\\S)'(?!\\S)","")
请参阅正则表达式演示。细节:
[^a-zA-Z\s']- 除 ASCII 字母、空格和单引号外的任何字符|- 或者(?<!\S)'(?!\S)- a'前后都没有非空白字符。查看Java 演示:
String s = " ' this ' is word' that's 'word";
System.out.println(s.replaceAll("[^a-zA-Z\\s']|(?<!\\S)'(?!\\S)",""));
// => this is word' that's 'word