我有一些字符串,它们可能包含随机的符号和数字。以下是一些示例:
contains(reserved[j])){
close();
i++){
letters[20]=word
我希望找到任何非字母字符,并用空格替换它,使上述示例看起来像:
contains reserved j
close
i
letters word
什么是最好的方法来做这件事?
我有一些字符串,它们可能包含随机的符号和数字。以下是一些示例:
contains(reserved[j])){
close();
i++){
letters[20]=word
我希望找到任何非字母字符,并用空格替换它,使上述示例看起来像:
contains reserved j
close
i
letters word
这取决于你对“不是字母”的理解,但假设你的意思是字母是a-z或A-Z,那么可以尝试以下方法:
s = s.replaceAll("[^a-zA-Z]", " ");
s = s.replaceAll("[^a-zA-Z]+", " ");
yourInputString = yourInputString.replaceAll("[^\\p{Alpha}]", " ");
^
表示“除了”所有字符。
\p{Alpha}
表示所有字母字符。
详见 Pattern。
\p{Alnum}
也会包含数字。 - BalusC[^\p{Alpha}]+
。方括号[]
表示一组。 \p {Alpha}
匹配任何字母字符(大写和小写字母,基本上与\p {Upper}\p {Lower}
和a-zA-Z
相同)。组内的^
反转匹配。 +
表示一个或多个匹配的序列。替换为空格的代码为" "
。string = string.replaceAll("[^\\p{Alpha}]+", " ");
另外,您可以查看{{link1:java.util.regex.Pattern
javadoc}}以获得可用模式的简明概述。您可以在伟大的网站http://regular-expression.info上了解更多关于正则表达式的知识。
"contains(reserved[j]))".gsub(/[^a-zA-Z]/, " ")
=> "contains reserved j "
在Java中应该是这样的:
import java.util.regex.*;
...
String inputStr = "contains(reserved[j])){";
String patternStr = "[^a-zA-Z]";
String replacementStr = " ";
// Compile regular expression
Pattern pattern = Pattern.compile(patternStr);
// Replace all occurrences of pattern in input
Matcher matcher = pattern.matcher(inputStr);
String output = matcher.replaceAll(replacementStr);