[英]Java Regex Matcher not giving expected result
我有以下代码。
String _partsPattern = "(.*)((\n\n)|(\n)|(.))";
static final Pattern partsPattern = Pattern.compile(_partsPattern);
String text= "PART1: 01/02/03\r\nFindings:no smoking";
Matcher match = partsPattern.matcher(text);
while (match.find()) {
System.out.println( match.group(1));
return; //I just care on the first match for this purpose
}
输出: PART1:01/02/0我期待PART1:01/02/03为什么我文本末尾的3与我的结果不匹配。
你的正则表达式的问题是.
不匹配\\r
或\\n
类的行分隔符,所以你的正则表达式会在\\r
\\n
之前停止,因为你的正则表达式的最后一部分
(.*)((\n\n)|(\n)|(.))
^^^^^^^^^^^^^^^
是必需的,它不能匹配\\r
最后一个字符将存储在(.)
。
如果您不想在匹配中包含这些行分隔符,请使用"(.*)$";
使用Pattern.MULTILINE
标志的模式使每行的$
match结束(它将表示标准行分隔符,如\\r
或\\r\\n
或\\n
但不会在匹配中包含它们)。
所以试试吧
String _partsPattern = "(.*)$"; //parenthesis are not required now
final Pattern partsPattern = Pattern.compile(_partsPattern,Pattern.MULTILINE);
其他方法是将你的正则表达式改为(.*)((\\r\\n)|(\\n)|(.))
或(.*)((\\r?\\n)|(.))
但是我不确定最后(.)
的目的是什么(我可能会删除它)。 它只是原始正则表达式的变体。
作品,给出"PART1: 01/02/03 "
。 所以我的猜测是,在实际代码中,您可能使用Reader.readLine
读取text
并错误地删除回车符+换行符。 远远不过,但我无法想象。 (readLine剥离换行符本身。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.