gpt4 book ai didi

java - 在Java中匹配一行并提取文件名的正则表达式

转载 作者:行者123 更新时间:2023-11-30 10:29:06 25 4
gpt4 key购买 nike

我有一个格式如下的字符串

Index: /aap/guru/asdte/atsAPI.tcl
===================================================================
RCS file: /autons/atsAPI.tcl,v
retrieving revision 1.41

Index: /aap/guru/asdte/atsAPI1.tcl
===================================================================
RCS file: /autons/atsAPI1.tcl,v
retrieving revision 1.41

我想要的是匹配以 Index: 开头的行,然后从路径中获取文件名。

我的意思是首先获取 Index:/aap/guru/asdte/atsAPI.tcl 然后提取 atsAPI.tcl 作为最终结果。

目前我使用了两次匹配,首先是整行,然后是提取文件名。

我的问题是,如何在 java 中用单个正则表达式来完成。

当前代码是

String line = "Index: /aap/guru/asdte/atsAPI.tcl\r\n===================================================================\r\nRCS file: /autons/atsAPI.tcl,v\r\nretrieving revision 1.41\r\n\r\nIndex: /aap/guru/asdte/atsAPI1.tcl\r\n===================================================================\r\nRCS file: /autons/atsAPI1.tcl,v\r\nretrieving revision 1.41";
Pattern regex1 = Pattern.compile("Index:.*?\\n", Pattern.DOTALL);
Pattern regex2 = Pattern.compile("[^*/]+$");

Matcher matcher1 = regex1.matcher(line);
while (matcher1.find()) {
String s = matcher1.group(0);

Matcher matcher2 = regex2.matcher(s);
while (matcher2.find()) {
System.out.println(matcher2.group(0));
}
}

最佳答案

how to do it in a single regular expression in java.

使用捕获组,如下所示。正则表达式:

^Index:.*\/(.*)

现在可以使用 matcher.group(1) 获取文件名,并由正则表达式中的最后一部分 (.*) 表示

  • ^ 匹配起始 anchor
  • Index: 按原样匹配文字
  • .* 匹配任何内容(贪心)
  • \/ 匹配斜杠 /
  • (.*) 匹配捕获组中的文件名

确保设置了 (?m)Pattern.MULTILINE 标志,以便匹配是多行的并且匹配起始 anchor ^在每一行的开头。

Regex101 Demo

编辑:修改您的代码以仅使用一个正则表达式,如下所示:

Pattern pattern = Pattern.compile("^Index:.*\\/(.*)", Pattern.MULTILINE);

Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println(matcher.group(1));
}

// Output:
atsAPI.tcl
atsAPI1.tcl

Demo

关于java - 在Java中匹配一行并提取文件名的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44239613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com