正则表达式除去单词之外的所有内容java的

时间:2015-06-01 00:54:44

标签: java regex string replace

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

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

我想删除字符串中的所有额外空格和所有数字或缩写,除了单词和此字符:'

例如:

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

返回:one o'clock

3 个答案:

答案 0 :(得分:0)

public static String filter(String input) {
    return input.replaceAll("[^A-Za-z0-9' ]", "").replaceAll(" +", " ");
}

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

答案 1 :(得分:0)

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

查看此解决方案:

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,})并且必须有一个尾随空格,则只需要单词。

答案 2 :(得分:-1)

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

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);
}

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