gpt4 book ai didi

java - 如何使用带有撇号的 Java 单词边界?

转载 作者:行者123 更新时间:2023-11-29 06:16:57 25 4
gpt4 key购买 nike

我试图删除列表中出现的所有单词,但当单词中有撇号时我遇到了麻烦。

String phrase="bob has a bike and bob's bike is red";
String word="bob";
phrase=phrase.replaceAll("\\b"+word+"\\b","");
System.out.println(phrase);

输出:
有一辆自行车并且 的自行车是红色的

我想要的是
有一辆自行车,bob 的自行车是红色的

我对正则表达式的了解有限,所以我猜想有一个解决方案,但我现在还不足以创建正则表达式来处理撇号。此外,我希望它与破折号一起使用,因此短语 the new mail is e-mail 只会替换第一次出现的邮件。

最佳答案

这完全取决于您对“词”的理解。也许你最好定义你所理解的单词分隔符:例如,空格、逗号....并写成

phrase=phrase.replaceAll("([ \\s,.;])" + Pattern.quote(word)+ "([ \\s,.;])","$1$2");

但是你必须额外检查字符串开头和结尾处的匹配项例如:

  String phrase="bob has a bike bob, bob and boba bob's bike is red and \"bob\" stuff.";
String word="bob";
phrase=phrase.replaceAll("([\\s,.;])" + Pattern.quote(word) + "([\\s,.;])","$1$2");
System.out.println(phrase);

打印这个

bob has a bike ,  and boba bob's bike is red and "bob" stuff.

更新:如果你坚持使用\b,考虑到“单词边界”理解Unicode,你也可以做这个卑鄙的把戏:替换所有出现的'通过一些您确定不会出现在您的文本中的 Unicode 字母,然后进行反向替换。示例:

  String phrase="bob has a bike bob, bob and boba bob's bike is red and \"bob\" stuff.";
String word="bob";
phrase= phrase.replace("'","ñ").replace('"','ö');
phrase=phrase.replaceAll("\\b" + Pattern.quote(word) + "\\b","");
phrase= phrase.replace('ö','"').replace("ñ","'");
System.out.println(phrase);

更新:总结下面的一些评论:人们会期望 \w\b 对哪个是“单词字符”有相同的概念,几乎每个正则表达式方言都可以。好吧,Java 没有:\w 考虑 ASCII,\b 考虑 Unicode。这是一个丑陋的矛盾,我同意。

更新 2:从 Java 7 开始(如评论中所指出的)UNICODE_CHARACTER_CLASS标志允许指定一致的 Unicode-only 行为,参见例如 here .

关于java - 如何使用带有撇号的 Java 单词边界?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4769652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com