正则表达式找到"can t","haven t"等等并添加撇号

CSn*_*erd 1 java regex

我需要处理一些错过撇号的句子.

例如:

  1. 项目是假的.卖方声称它是真实的而且不是

  2. 它那假的,也没有照片,你可以T看到马林鱼,发回等待退款.

如何使用正则表达式来查找"不能","不能","没有","不是","它是"等等.

注意:

"它"和"不能"在这里可能会很棘手.

例如:

"我讲故事"vs"我现在什么做不了"

我们不应该在第一句中添加撇号

Tim*_*sen 9

我建议你不要试图在这里进行正则表达式奥运会,而是用正确的替换品替换每个破损的收缩.您可以定义一个地图,将每个损坏的收缩映射到其替换.然后,迭代该映射并将每个更正应用于要更正的文本.

String input = "I can t do it because it s not raining and it doesn t make sense.";
Map<String, String> cnts = new HashMap<>();
cnts.put("doesn t", "doesn't");
cnts.put("can t", "can't");
cnts.put("haven t", "haven't");
cnts.put("aren t", "aren't");
cnts.put("it s", "it's");
cnts.put("isn t", "isn't");
for (Map.Entry<String, String> entry : cnts.entrySet()) {
    String start = entry.getKey();
    String end = entry.getValue();
    input = input.replaceAll("\\b" + start + "\\b", end);
}
System.out.println(input);
Run Code Online (Sandbox Code Playgroud)

输出:

I can't do it because it's not raining and it doesn't make sense.
Run Code Online (Sandbox Code Playgroud)

  • @PeterRader不,这不会发生,因为我的正则表达式在'Can t`的两边寻找一个单词边界. (3认同)