【问题标题】:How to exclude a character from regular expression?如何从正则表达式中排除字符?
【发布时间】:2020-11-11 14:22:45
【问题描述】:

我想替换字符串中的所有非单词字符,但我需要检查单词中是否包含连字符,但替换会删除连字符。 有没有办法在我替换所有不是字母的东西后做到这一点,还是在替换之前我必须检查?

这是我的代码

word = word.replaceAll("[^a-zA-Z]", "").toLowerCase();

【问题讨论】:

标签: java


【解决方案1】:

使用正则表达式 [^\w-] 表示 NOT(word character-)。

public class Main {
    public static void main(String[] args) {
        // Test
        String word = "Hello :) Hi, How are you doing? The Co-operative bank is open 2day!";
        word = word.replaceAll("[^\\w-]", "").toLowerCase();
        System.out.println(word);
    }
}

输出:

hellohihowareyoudoingtheco-operativebankisopen2day

请注意,单词字符(即\w)包括A-Za-z0-9_。如果您希望您的正则表达式最多限制为字母和连字符,您应该使用[^A-Za-z\-]

public class Main {
    public static void main(String[] args) {
        // Test
        String word = "Hello :) Hi, How are you doing? The Co-operative bank is open 2day!";
        word = word.replaceAll("[^A-Za-z\\-]", "").toLowerCase();
        System.out.println(word);
    }
}

输出:

hellohihowareyoudoingtheco-operativebankisopenday

【讨论】:

    【解决方案2】:

    我需要检查单词中是否有连字符,但替换会删除连字符

    所以在去除非字母字符之前检查是否有连字符。

    if(word.contains("-")) {
        //do whatever
    }
    //remove non-alpha chars
    

    【讨论】:

      猜你喜欢
      • 2011-05-05
      • 2019-08-03
      • 1970-01-01
      • 2021-12-08
      • 2021-09-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      相关资源
      最近更新 更多