Java正则表达式无法匹配指定字符串问题求助
解决正则匹配
12.5'格式失败的问题 看起来你在匹配建筑尺寸格式(比如12.5')时遇到了问题,我帮你分析几个可能的原因和修复方案:
核心问题1:matches() vs find()的误用
从你代码里的wDash.matcher(line).mat...片段来看,你大概率是用了matches()方法。这个方法要求正则表达式完全匹配整个输入字符串——如果你的输入是类似"Room width: 12.5'"这种包含其他内容的字符串,肯定会匹配失败。
如果你只是想在输入字符串中找到符合数字.数字'格式的子串,应该改用find()方法,它会扫描整个字符串查找匹配的子片段。
正则表达式的小优化
你的正则((\\d+)\\.(\\d+))\\'里有几个可以简化的地方:
- 单引号
'不是正则的特殊字符,在Java字符串里不需要转义,直接写'就行,不需要额外的\\ - 外层的分组如果不是为了单独捕获整个匹配结果,可以去掉,简化为
\\d+\\.\\d+'
修正后的正则可以写成:
Pattern wDecimal = Pattern.compile("\\d+\\.\\d+'");
修复后的代码示例
下面是完整的测试代码,分别展示matches()(匹配整个字符串)和find()(查找子串)的用法:
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class ArchitecturalMatcher { // 匹配数字.数字'格式的正则 private static final Pattern wDecimal = Pattern.compile("\\d+\\.\\d+'"); public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Please input your Architectural String: "); while (true) { String line = input.nextLine(); Matcher mwDecimal = wDecimal.matcher(line); // 情况1:检查整个字符串是否完全是12.5'格式 if (mwDecimal.matches()) { System.out.println("完全匹配格式:" + line); } else { // 情况2:检查字符串中是否包含符合格式的子串 if (mwDecimal.find()) { System.out.println("找到匹配的子串:" + mwDecimal.group()); } else { System.out.println("未找到符合格式的内容"); } } } } }
额外注意点
你代码里出现的wDash变量没有定义,应该是笔误,改成wDecimal就可以正常使用了。
内容的提问来源于stack exchange,提问作者C0DeX
相关产品推荐
相关产品推荐

