【问题标题】:Regular expression to remove everything but words. java正则表达式删除除单词之外的所有内容。爪哇
【发布时间】:2015-06-01 00:54:44
【问题描述】:

这段代码似乎没有做正确的工作。它会删除单词之间的空格!

input = scan.nextLine().replaceAll("[^A-Za-z0-9]", "");

我想从字符串中删除所有多余的空格和所有数字或缩写,单词和以下字符除外:'

例如:

输入: 34 4fF$#@D one 233 r # o'clock 329riewio23

返回:one o'clock

【问题讨论】:

  • 你已经尝试过什么?似乎有什么问题?
  • @PM77-1 我忘了添加代码。现在就在那里

标签: java regex string replace


【解决方案1】:
public static String filter(String input) {
    return input.replaceAll("[^A-Za-z0-9' ]", "").replaceAll(" +", " ");
}

第一个替换替换除字母字符、单引号和空格之外的所有字符。第二个替换用一个空格替换一个或多个空格的所有实例。

【讨论】:

    【解决方案2】:

    您的解决方案不起作用,因为您不替换数字并且还替换了' 字符。

    查看此解决方案:

    Pattern pattern = Pattern.compile("[^| ][A-Za-z']{2,} ");
    String input = scan.nextLine();
    Matcher matcher = pattern.matcher(input);
    StringBuilder result = new StringBuilder();
    while (matcher.find()) {
        result.append(matcher.group());
    }
    System.out.println(result.toString());
    

    它查找字符串或空格的开头 ([^| ]),然后获取所有后续字符 ([A-Za-z'])。但是,只有在有 2 个或更多字符 ({2,}) 并且必须有一个尾随空格时才使用该单词。

    【讨论】:

      【解决方案3】:

      如果您只想提取该时间信息,请使用此正则表达式组匹配:

      input = scan.nextLine();
      Pattern p = Pattern.compile("([a-zA-Z]{3,})\\s.*?(o'clock)");
      Matcher m = p.matcher(input);
      if (m.find()) {
          input = m.group(1) + " " + m.group(2);
      }
      

      不过,正则表达式非常幼稚,只有在输入始终采用相似格式时才会起作用。

      【讨论】:

        猜你喜欢
        • 2017-08-24
        • 2019-11-12
        • 1970-01-01
        • 2018-05-26
        • 1970-01-01
        • 2019-04-15
        • 2010-10-16
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多