java - 在 Java 中使用正则表达式搜索特定行

标签 java regex

我是正则表达式的新手,我的问题可能是非常基本的问题。

我想创建一个可以在特定行号上搜索表达式的正则表达式。

例如。 我有资料

"\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" + 

我想在第 7 行搜索号码 1234。它可能也可能不出现在其他线路上。

我试过

"\\n.*\\n.*\\n.*\\n.*\\n.*\\n.*\\d{4}" 

但我没有得到结果。

请帮我解决正则表达式问题。

最佳答案

首先,您的换行符 字符应该放在行尾。这样,想象一条特定的线会更容易。 以下解释基于此修改。

现在,要到达第 7 行,您首先需要跳过前 6 行,您可以使用 {n,m} 量词来完成。您不需要编写 .*\n 6 次。所以,这将是这样的:

(.*\n){6}

然后您在第 7 行,您可以在其中匹配所需的数字。那部分将是这样的:

.*?1234

然后使用 .*

匹配文本的其余部分

因此,您的最终正则表达式如下所示:

(?s)(.*\n){6}.*?1234.*

因此,只需使用 String#matches(regex)使用此正则表达式的方法。

附言(?s) 用于启用单行匹配。由于点(.)默认不匹配换行符。

要打印你匹配的东西,你可以使用捕获组:

(?s)(?:.*\n){6}.*?(1234).*

如果在 组 1 中匹配,这将捕获 1234。虽然这看起来很不寻常,但您捕获了一个与您匹配的确切字符串 - 就像捕获 1234 在这里没有意义,因为您知道您正在匹配 1234,而不是 \\d,在这种情况下,您可能会对这些数字到底是什么感兴趣。

关于java - 在 Java 中使用正则表达式搜索特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145093/

相关文章:

c# - 使用正则表达式查找字符串中的所有匹配项

java - 如何在 swt 工具提示上隐藏程序名称

html - 逗号分隔的单词正则表达式(html 输入模式)

数字后的 MYSQL REGEXP_REPLACE

javascript - 如何仅在文本区域的开头删除空格和换行符

java - 用于识别构造函数声明的正则表达式

java - 如何在 DefaultMutableTreeNode 上获取鼠标监听器?

java - iPOJO : identifier uniqueness namespace for @Publishes and @Subscriber

java - 在 Android 中监控电池电量的正确优化方法

java - 我的 Warshall 算法缺少什么?