Java字符串替换所有正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java字符串替换所有正则表达式相关的知识,希望对你有一定的参考价值。

嗨,我想删除长字符串中的某些单词,问题是有些单词以“s”结尾,有些单词以大写字母开头,基本上我想转:

"Hello cat Cats cats Dog dogs dog fox foxs Foxs"

成:

"Hello"

目前我有这个代码,但我希望改进它,提前感谢:

                    .replace("foxs", "")
                    .replace("Fox", "")
                    .replace("Dogs", "")
                    .replace("Cats", "")
                    .replace("dog", "")
                    .replace("cat", "")
答案

试试这个:

String input = "Hello cat Cats cats Dog dogs dog fox foxs Foxs";
input = input.replaceAll("(?i)\s*(?:fox|dog|cat)s?", "");

Demo

另一答案

也许你可以尝试匹配除了Hello这个词之外的所有东西。就像是:

string.replaceAll("(?!Hello)\b\S+", "");

你可以在this link测试它。

这个想法是为Hello单词执行负向前瞻,并获得任何其他单词。

另一答案

您可以生成与单词的所有组合匹配的模式。即对于dog你需要模式[Dd]ogs?

  • [Dd]是一个匹配两种情况的字符类
  • s?匹配零或一个s
  • 其余部分将区分大小写。即dOGS不会是一场比赛。

这是你如何把它放在一起:

public static void main(String[] args) {
    // it's easy to add any other word
    String original = "Hello cat Cats cats Dog dogs dog fox foxs Foxs";
    String[] words = {"fox", "dog", "cat"};
    String tmp = original;
    for (String word : words) {
        String firstChar = word.substring(0, 1);
        String firstCharClass = "[" + firstChar.toUpperCase() + firstChar.toLowerCase() + "]";
        String patternSrc = firstCharClass + word.substring(1) + "s?"; // [Ww]ords?
        tmp = tmp.replaceAll(patternSrc, "");
    }
    tmp = tmp.trim(); // to remove unnecessary spaces 
    System.out.println(tmp);
}
另一答案

所以你可以预先编译你想要的单词列表,并使它不区分大小写:

    String str = "Hello cat Cats cats Dog dogs dog fox foxs Foxs";
    Pattern p = Pattern.compile("fox[s]?|dog[s]?|cat[s]?", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(str);
    String result = m.replaceAll("");
    System.out.println(result);

[S]?处理如果有复数形式,在哪里?字符将匹配0或1

以上是关于Java字符串替换所有正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Java字符串替换所有正则表达式

通过 Java 正则表达式提取 semver 版本字符串的片段

C ++正则表达式替换第一个匹配项

Javascript 正则表达式替换所有非货币字符

Java提取文本文档中的所有网址(小案例介绍正则基础知识)

java正则表达式如何获取字符串中所有匹配内容