我有以下代码。

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)|(.))之类的东西,但是我不确定最后一个(.)的目的是什么(我可能会删除它)。这只是您原始正则表达式的变体。

10-05 22:36