在Java中使用正则表达式搜索特定行
我是正则表达式新手,可能我的问题很基本 我想创建一个正则表达式,它可以搜索特定行号上的表达式 例如。 我有数据在Java中使用正则表达式搜索特定行,java,regex,Java,Regex,我是正则表达式新手,可能我的问题很基本 我想创建一个正则表达式,它可以搜索特定行号上的表达式 例如。 我有数据 "\nerferf erferfre erferf 12545" + "\ndsf erf" + "\nsdsfd refrf refref" + "\nerferf erferfre erferf 12545" + "\ndsf erf" + "\nsdsfd refrf refref" + "\nerferf erferfre erferf 12545" + "\nd
"\nerferf erferfre erferf 12545" +
"\ndsf erf" +
"\nsdsfd refrf refref" +
"\nerferf erferfre erferf 12545" +
"\ndsf erf" +
"\nsdsfd refrf refref" +
"\nerferf erferfre erferf 12545" +
"\ndsf erf" +
"\nsdsfd refrf refref" +
"\nerferf erferfre erferf 12545" +
我想搜索第七行的1234号。它也可能出现在其他线路上,也可能不存在
我试过了
"\\n.*\\n.*\\n.*\\n.*\\n.*\\n.*\\d{4}"
但是我没有得到结果
请帮我解决正则表达式。这个问题最好不要单独用正则表达式来解决。首先拆分换行符上的字符串,以获得行数组:
String[] lines = data.split("\\n");
然后,要在第7行执行正则表达式:
try {
String line7 = lines[6];
// do something with it
} catch (IndexOutOfBoundsException ex) {
System.error.println("Line not found");
}
希望这是你的一个开始
编辑:我不是正则表达式的专家,但我会尝试使用这个:
"(\\n.*){5}(.*)"
如果这不是正确的Java语法,很抱歉,但这应该首先捕获5行新行+数据,因此这6行已经消失,并且数据本身应该在第二个捕获组(包括新行)中可用。如果要排除前面的换行符:
"(\\n.*){5}\\n(.*)"
试一试
首先,您的
换行符
字符应该放在行尾。这样,画一条特定的线会更容易。以下解释基于此修改
现在,要到达第7行,您首先需要跳过前6行,您可以使用{n,m}
量词。您不需要写*\n
6次。那就是这样的:
(.*\n){6}
.*?1234
然后你在第7行,在那里你可以匹配你所需的数字。那部分是这样的:
(.*\n){6}
.*?1234
然后使用*
因此,您的最终正则表达式如下所示:
(?s)(.*\n){6}.*?1234.*
所以,只需使用这个正则表达式的方法
p.S.(?S)
用于启用单行匹配。由于默认情况下点(..
)与换行符不匹配
要打印匹配的内容,可以使用捕获组:
(?s)(?:.*\n){6}.*?(1234).*
如果在组1中匹配,这将捕获1234
。虽然这看起来很不寻常,但您捕获的是您正在匹配的精确字符串-就像捕获1234
在这里是没有意义的,因为您知道您正在匹配1234
,而不是针对\\d
,在这种情况下,您可能会对这些数字的确切含义感兴趣。您可以使用:
(^.*\r\n)(^.*\r\n)(^.*\r\n)(^.*\r\n)(^.*\r\n)(^.*\r\n)(^.*)(1234)
谢谢你的回复。但我正在学习正则表达式,只想用它来解决这个问题。我不能把线分开。我想你的换行应该在这行的末尾,而不是开头。谢谢。搜索时跳过前6行,但打印时也会打印前6行。@NiteshGupta。只需在组中捕获您想要打印的内容。你到底想打印什么?我们不能只从正则表达式中删除不需要的行吗。只是一个想法。我对正则表达式知之甚少。@NiteshGupta。当然你可以,但问题是——你只想把第七行退回来吗?如果是,则将其捕获到一个组中。就这样。我已经对我的答案进行了一些编辑。请注意Java中的
。当前正则表达式将从整个字符串中排除某些字符(如果有关系的话)。另一件事是,在找到1234