我有以下代码。
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)|(.))
^^^^^^^^^^^^^^^
是必填项,且不能与
\r
匹配。最后一个字符将存储在(.)
中。如果您不想在匹配中包括这些行分隔符,只需将
"(.*)$";
模式与Pattern.MULTILINE
标志一起使用,以使$
匹配每行的结尾(它将代表标准的行分隔符,例如\r
或\r\n
或\n
,但不会包含在匹配项中)。所以尝试
String _partsPattern = "(.*)$"; //parenthesis are not required now
final Pattern partsPattern = Pattern.compile(_partsPattern,Pattern.MULTILINE);
其他方法是将您的正则表达式更改为
(.*)((\r\n)|(\n)|(.))
或(.*)((\r?\n)|(.))
之类的东西,但是我不确定最后一个(.)
的目的是什么(我可能会删除它)。这只是您原始正则表达式的变体。