Java 正则表达式仅替换输入文件中的某些撇号

Java Regex to replace only certain apostrophes from input files

我正在编写代码以根据大量输入文件构建倒排索引。我已经能够使用

解析输入

String[] words = value.toString().replaceAll("[^a-zA-Z ]", " ").toLowerCase().split("\s+");

我运行在用空字符串替换特殊字符时遇到了一些麻烦,因为这导致一些单词合并在一起,所以我在上面的代码中用空格替换了它们。但是,使用上面的代码仍然没有给出我想要的输出,因为它将带撇号的单词分成两个单词

我使用的输入文件多种多样,有的是莎士比亚的诗歌,有的是剧本等。 我无法弄清楚如何在我的话中包含某些撇号而不包含其他撇号。

例如:

输入

'twas, 't,[order'd], king's, o', 'Brutus!', ''At

应该return

'twas 't order'd king's o' Brutus At

换句话说,我想在前面或结尾的单引号和包含单引号后跟单个字母的单词的情况下保留撇号,同时去掉单词周围的一对单引号或双撇号在一个词之前或之后。有什么方法可以使用一系列正则表达式来做到这一点或类似的事情吗?

  • 用空格替换所有逗号(不创建双空格)
  • 删除所有非“keeper”字符
  • 从引用的条款中删除引号
str = str.replaceAll(" *, *", " ")
  .replaceAll("[^\w' !]", "")
  .replaceAll("'(\S*)'", "");

live demo

\w 表示“任意字符字符” \S 表示“任何非空白字符”

如果您想保留更多字符,请相应地调整正则表达式。