如何编写Java正则表达式以匹配NEW D City和1259669?
解决Java正则匹配带空格字段的问题
嘿,我来帮你搞定这个正则小坑!你之前用(?<=:\s)\w+只能拿到NEW而不是完整的NEW D City,核心原因是\w只能匹配字母、数字和下划线,空格不在它的匹配范围内,所以碰到空格就直接停了,自然拿不到后面的D City。
给你两个实用的解决方案,看你需求选:
方案1:通用匹配冒号后的所有内容(直到分隔符或结尾)
这个正则能适配冒号后带任意字符(包括空格)的场景,只要内容到|或者字符串结尾就停止:
String regex = "(?<=:\\s)(.*?)(?= \\| |$)";
正则拆解:
(?<=:\\s):正向零宽断言,确保匹配内容的前面是冒号+空格(.*?):非贪婪模式匹配任意字符(除换行),避免过度匹配到后面的内容(?= \\| |$):正向零宽断言,确保匹配内容的后面是|分隔符或者字符串结尾
用Java代码测试的话,会依次输出NEW D City和1259669,完美符合你的需求。
方案2:精准匹配固定格式的两个字段
如果你的输入格式一直是Object No: XXX | Item ID: YYY这种固定结构,用分组捕获会更精准:
String regex = "Object No: (.*?) \\| Item ID: (\\d+)";
用法示例:
String input = "Object No: NEW D City | Item ID: 1259669"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); if (matcher.find()) { String city = matcher.group(1); // 拿到NEW D City String itemId = matcher.group(2); // 拿到1259669 }
这里(.*?)捕获城市名称(带空格),(\d+)专门匹配数字ID,针对性更强。
内容的提问来源于stack exchange,提问作者dian mushkov
相关产品推荐
相关产品推荐

