我有一个正则表达式模式,匹配文本,如"周日","某事物"我希望将这种模式替换为"工作日","某些事情"。
我做了如下的事情:
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的新手。
答案 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
可以是编译时常量。