我有以下代码。
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与我的结果不匹配。
答案 0 :(得分:2)
正则表达式的问题在于.
与\r
或\n
之类的行分隔符不匹配,因此您的正则表达式将在\r
之前停止并且从正则表达式的最后部分开始< / p>
(.*)((\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)|(.))
,但我不确定最后(.)
的目的是什么(我可能会删除它)。它只是原始正则表达式的变体。
答案 1 :(得分:0)
作品,给予"PART1: 01/02/03 "
。所以我的猜测是,在实际代码中,您可能会使用text
读取Reader.readLine
并错误地删除回车符+换行符。远远不过,但我无法想象。 (readLine剥离换行符本身。)