在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