1

我需要从文本中排除所有符号,除了字母、空格和独立撇号(如:“'”或“this ' is”),但如果撇号是单词的一部分(如:“word'”或“那是”或“'字”)。我尝试了 String.replaceAll("[^a-z'\\s]","")方法,似乎我需要添加类似的东西[^([a-z]*'[a-z]+|[a-z]+'[a-z]*)],但我无法做出完整的表达,而且表达的第二部分似乎无效。

感谢帮助!

4

1 回答 1

2

您可以使用

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
于 2020-11-25T14:17:58.690 回答