【问题标题】:Problem replacing words using [^a-zA-Z] regex使用 [^a-zA-Z] 正则表达式替换单词时出现问题
【发布时间】:2008-11-22 12:21:13
【问题描述】:

只是无法得到这个,谷歌搜索也没有多大帮助..

首先我知道:给定一个字符串和一个正则表达式,如何用替换字符串替换所有匹配这个正则表达式的字符串?使用 String 类中的replaceAll() 方法。

现在是我无法做到的事情。我现在在我的代码中使用的正则表达式是 [^a-zA-Z] 我确信这个正则表达式肯定会有一个范围。只有更多的字符可能会添加到列表中。我需要作为下面代码中的输出是 Worksheet+blah 但我使用 replaceAll() 得到的是 Worksheet++++blah

String homeworkTitle = "Worksheet%#5_blah";
String unwantedCharactersRegex = "[^a-zA-Z]";
String replacementString = "+";
homeworkTitle = homeworkTitle.replaceAll(unwantedCharactersRegex,replacementString);
System.out.println(homeworkTitle);

实现我想要的输出的方法是什么?我在这里缺少任何 Java 方法吗?

【问题讨论】:

  • 谢谢大家!! [^a-zA-Z]+ 效果很好.. 忽略了这个事实 - 我的错!
  • 只想推荐regexpal.com,您可以在其中直观地测试您的正则表达式。诚然,它在 javascript 中,但对于不太复杂的表达式,它应该与在 java 中一样工作。

标签: java regex replace


【解决方案1】:
[^a-zA-Z]+

会做得很好。

您只需要一个greedy quantifier 即可匹配尽可能多的非字母字符,并将所有匹配替换为一个“+”(a - 默认情况下 - 贪婪量词)

注意:[^a-zA-Z]+? 会使 '+' 量词变得懒惰,并且会得到与[^a-zA-Z] 相同的结果,因为它一次只能匹配一个非字母字符。

【讨论】:

  • 只是一个小问题:你并不真正需要一个“贪婪”模式,因为你需要一个 量词——说一次或多次出现——默认情况下贪心。
【解决方案2】:
String unwantedCharactersRegex = "[^a-zA-Z]"

这匹配单个非字母。因此,每个非字母都被替换为 +。你需要说“一个或多个”,所以试试

String unwantedCharactersRegex = "[^a-zA-Z]+"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多