gpt4 book ai didi

java - 正则表达式查找字符串中的数字

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:38 24 4
gpt4 key购买 nike

我正在使用 removeNumbers 通过正则表达式删除给定字符串中的所有数字
“(^|)\\d+($|(\\d+)+($|)|)”

代码如下:

public class Regex {    
private static String removeNumbers(String s) {
s = s.trim();
s = s.replaceAll(" +", " ");
s = s.replaceAll("(^| )\\d+($|( \\d+)+($| )| )", " ");
return s.trim();
}

public static void main(String[] args) {
String[] tests = new String[] {"123", "123 456 stack 789", "123 456 789 101112 131415 161718 192021", "stack 123 456 overflow 789 com", "stack 123 456 overflow 789", "123stack 456", "123 stack456overflow", "123 stack456", "123! @456#567"};
for (int i = 0; i < tests.length; i++) {
String test = tests[i];
System.out.println("\"" + test + "\" => \"" + removeNumbers(test) + "\"");
}
}
}

输出:

"123" => ""
" 123 " => ""
"123 456 stack 789" => "stack"
"123 456 789 101112 131415 161718 192021" => ""
"stack 123 456 overflow 789 com" => "stack overflow com"
"stack 123 456 overflow 789" => "stack overflow"
"123stack 456" => "123stack"
"123 stack456overflow" => "stack456overflow"
"123 stack456" => "stack456"
"123! @456#567" => "123! @456#567"

有没有更好的方法来做到这一点?

编辑:

正如@mbomb007 在他之前的回答中所建议的那样,正则表达式 "( |^)[\\d ]+( |$)" 也适用:

private static String removeNumbers(String s) {
s = s.trim();
s = s.replaceAll(" +", " ");
s = s.replaceAll("( |^)[\\d ]+( |$)", " ");
return s.trim();
}

最佳答案

AFAIU,你可以这样做:

private static String removeNumbers(String s) {
return s.replaceAll("\\b\\d+\\b", "").replaceAll(" +", " ").trim();
}

\b\d+\b 匹配一个或多个组成单词的数字。

编辑:

由于模式不能匹配字符串中的数字,例如 "123!@456#567",因此可以结合使用积极的后视和先行条件:

private static String removeNumbers(String s) {
return s.replaceAll("(?<= |^)\\d+(?= |$)", " ").replaceAll(" +", " ").trim();
}

关于java - 正则表达式查找字符串中的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975425/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com