gpt4 book ai didi

java - 正则表达式仅匹配字母和数字

转载 作者:行者123 更新时间:2023-12-02 05:01:52 25 4
gpt4 key购买 nike

你能帮忙修改一下这段代码吗?

看似简单,但总是失败。

@Test
public void normalizeString(){
StringBuilder ret = new StringBuilder();
//Matcher matches = Pattern.compile( "([A-Z0-9])" ).matcher("P-12345678-P");
Matcher matches = Pattern.compile( "([\\w])" ).matcher("P-12345678-P");
for (int i = 1; i < matches.groupCount(); i++)
ret.append(matches.group(i));

assertEquals("P12345678P", ret.toString());
}

最佳答案

构造Matcher不会自动执行任何匹配。部分原因是 Matcher 支持两种不同的匹配行为,不同之处在于匹配是否隐式锚定到 Matcher 区域的开头。看来您可以达到您想要的结果,如下所示:

@Test
public void normalizeString(){
StringBuilder ret = new StringBuilder();
Matcher matches = Pattern.compile( "[A-Z0-9]+" ).matcher("P-12345678-P");

while (matches.find()) {
ret.append(matches.group());
}

assertEquals("P12345678P", ret.toString());
}

特别注意 Matcher.find() 的调用,这是您的版本中的一个关键遗漏。此外,空 Matcher.group() 返回与最后一个 find() 匹配的子字符串。

此外,虽然您对 Matcher.groupCount() 的使用并不完全错误,但它确实让我怀疑您对它的作用有错误的想法。特别是,在您的代码中,它将始终返回 1 ——它查询模式,而不是与之匹配的内容。

关于java - 正则表达式仅匹配字母和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28202368/

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