2

我有一个正则表达式模式,它匹配“工作日”、“某事”等文本。我想用“工作日”、“某事”替换这个模式。

我做了如下的事情:

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 等之间的连字符。我该如何解决这个问题?我是正则表达式的新手。

4

1 回答 1

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以上可以是编译时常量。

于 2013-10-06T00:38:30.757 回答