【问题标题】:The replaceAll() with regular expression not working带有正则表达式的 replaceAll() 不起作用
【发布时间】:2018-01-22 20:48:54
【问题描述】:

这是我的 Java 代码:

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String a = in.nextLine();

String pattern = "^co[a-z|A-Z]e$";

String b = a.replaceAll(pattern,"1");
System.out.print(b);

我只需要将单词“code”或任何带有“co'[a-z|A-Z]'e”的单词替换为'1',但它似乎只在输入字符串为“code”时才有效,没有别的

示例输入:codexxccope

预期输出:1xxc1

我的输出:codexxccope

示例输入 2:code

我的输出:1

有什么建议吗?

【问题讨论】:

  • 使用String pattern = "\\bco[a-zA-Z]e\\b";
  • ^ 代表字符串开始,$ 代表字符串结束。这意味着只有当整个字符串匹配时才会替换该模式。
  • 另外,在字符类中,| 符号是一个普通字符。如果您只想匹配大小写拉丁字母,则只需将其从字符类中完全删除即可。
  • @WiktorStribiżew,它仍然无法正常工作,输出相同
  • 抱歉,只删除锚点,使用String pattern = "co[a-zA-Z]e";

标签: java regex


【解决方案1】:

这里有两个问题:^ 匹配字符串位置的开头,$ 匹配字符串位置的结尾,[a-z|A-Z] 匹配任何 ASCII 字母或|(因为字符类内的管道匹配文字 | 字符。

使用

String pattern = "co[a-zA-Z]e";

[a-zA-Z] 字符类匹配任何 ASCII 字母。

请参阅regex demo。

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多