用Java中的小修改替换字符串模式

时间:2013-10-06 00:27:23

标签: java regex string

我有一个正则表达式模式,匹配文本,如"周日","某事物"我希望将这种模式替换为"工作日","某些事情"。

我做了如下的事情:

Pattern alpha_only = Pattern.compile("[a-zA-Z]+\\-[a-zA-Z]+");
Matcher alonly_matcher = alpha_only.matcher(token);
while (alonly_matcher.find()){
    old_val = alonly_matcher.group(0);
    new_val = old_val.replaceAll("\\-", " ");
    token = token.replace(old_val, new_val);
}

但是在字符串包含许多连字符的情况下,这不起作用。例如,在像

这样的字符串中
"This is some-example text with - multiple hyphens and 45-55 week-day"

它不应该删除45-55之间的连字符等。我该如何修复它?我是regex的新手。

1 个答案:

答案 0 :(得分:5)

您已拥有所需的所有信息。只需使用捕获组。

Pattern alphaHyphenated = Pattern.compile("([a-zA-Z]+)\\-([a-zA-Z]+)");
Matcher alphaMatcher = alphaHyphenated.matcher(token);
return alphaMatcher.replaceAll("$1 $2");

或者,简单地

return token.replaceAll("([a-zA-Z]+)\\-([a-zA-Z]+)", "$1 $2");

当然,每次运行时都会编译模式。上面的alphaHyphenated可以是编译时常量。