我有这个输入文本:142d 000781fe0000326f BPD false 65535 FSK_75 FSK_75 -51.984 -48我想使用正则表达式来提取 000781fe0000326f 和 -51.984,所以输出看起来像这样000781fe0000326f-51.984我可以分别使用[0-9]{5,7}(?:[a-z][a-z0-9_]*)and([-]?\\d*\\.\\d+)(?![-+0-9\\.])来提取000781fe0000326fand -51.984。有没有办法忽略或排除000781fe0000326f和之间的所有内容-51.984?要忽略非贪婪填充符 (.*?) 将捕获的所有内容?String ref="[0-9]{5,7}(?:[a-z][a-z0-9_]*)_____([-]?\\d*\\.\\d+)(?![-+0-9\\.])"; Pattern p = Pattern.compile(ref,Pattern.CASE_INSENSITIVE | Pattern.DOTALL); Matcher m = p.matcher(input); while (m.find()) { String all = m.group(); //list3.add(all); }
1 回答
森栏
TA贡献1810条经验 获得超5个赞
对于示例数据,您可以使用交替 |来匹配您问题中的任一正则表达式,然后将它们连接起来。
请注意,在您的正则表达式中,您可以编写(?:[a-z][a-z0-9_]*)as[a-z][a-z0-9_]并且不必转义字符类中的点。
例如:
[0-9]{5,7}[a-z][a-z0-9_]*|-?\d*\.\d+(?![-+0-9.])
String regex = "[0-9]{5,7}[a-z][a-z0-9_]*|-?\\d*\\.\\d+(?![-+0-9.])";
String string = "142d 000781fe0000326f BPD false 65535 FSK_75 FSK_75 -51.984 -48";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);
String result = "";
while (matcher.find()) {
result += matcher.group(0);
}
System.out.println(result); // 000781fe0000326f-51.984
添加回答
举报
0/150
提交
取消