如何解决返回'字符和正则表达式java 8的换行符
我在Java 8中遇到了一种奇怪的行为,涉及在正则表达式中使用(\ r?\ n)来解析文本文件,并在Java 8下运行IDE eclipse。
请参见regex101测试演示https://regex101.com/r/QHSsfQ/4
正则表达式对于带有IDE eclipse的Java 7正常工作。
但是由于IDE在Java 8中运行,因此无法正常工作(请参见下面的代码)
有人可以帮我解决这个问题吗?
String REGEX =
"\\s+NAME.*" + "\\r?\\n"
+ "INFO-\\d{1,2}\\s+(?<name>[$\\w]+).*" + "\\r?\\n"
+ ".*" + "\\r?\\n"
+ ".*VERAT2.*" + "\\r?\\n"
+ "\\s+\\w+\\s+(?<verat2>\\w+).*"
.......
.......
Matcher matcher = Pattern.compile( REGEX ).matcher( data );
if( matcher.find() )
{
System.out.println("LEVELINFO=DATA=" + matcher.group("name") + " &&NAME=" + matcher.group("name") +" &&VERAT2="+ matcher.group("verat2")+"\n");
}
}
sc.close();
示例文本文件如下所示:
DATA NAME MAC1
INFO-0 EQUIP Q10
VL VER VERAT2
V22 V22
谢谢
解决方法
替代正则表达式:
String regexName = "^DATA\\s+NAME\\s+.*?^\\S+\\s+(?<name>\\S+)";
String regexVerat2 = "\\s+VER\\s+VERAT2\\s+.*?^\\s+\\S+\\s+(?<verat2>\\S+)";
String regex = String.format("%s.*?%s",regexName,regexVerat2);
Matcher matcher = Pattern.compile(regex,Pattern.MULTILINE|Pattern.DOTALL).matcher(input);
上下文中的正则表达式:
public static void main(String[] args) {
String input =
"DATA NAME MAC1 MAC2\n"
+ "INFO-0 EQUIP Q10 Q13\n"
+ " \n"
+ " VL VER VERAT2 MAP\n"
+ " V22 V22 SELF100\n"
+ " \n"
+ " CMD1 CMD2 CMD3 CMD4 CMD4 \n"
+ " NO 44 FAL BYTE\n";
String regexName = "^DATA\\s+NAME\\s+.*?^\\S+\\s+(?<name>\\S+)";
String regexVerat2 = "\\s+VER\\s+VERAT2\\s+.*?^\\s+\\S+\\s+(?<verat2>\\S+)";
String regex = String.format("%s.*?%s",regexVerat2);
Matcher matcher = Pattern.compile(regex,Pattern.MULTILINE|Pattern.DOTALL).matcher(input);
while(matcher.find()) {
System.out.println("Name: " + matcher.group("name"));
System.out.println("Verat2 : " + matcher.group("verat2"));
}
}
输出:
Name: EQUIP
Verat2 : V22
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。