gpt4 book ai didi

java - 需要正则表达式匹配方面的帮助

转载 作者:行者123 更新时间:2023-12-01 19:46:47 25 4
gpt4 key购买 nike

这可能非常简单,但我对正则表达式非常陌生,并且有一个要求,我需要在字符串中进行一些正则表达式匹配并提取其中的数字。下面是我的代码,包含示例 i/p 和所需的 o/p。我尝试通过引用https://www.freeformatter.com/java-regex-tester.html来构造Pattern ,但我的正则表达式匹配本身返回 false。

Pattern pattern = Pattern.compile(".*/(a-b|c-d|e-f)/([0-9])+(#[0-9]?)");
String str = "foo/bar/Samsung-Galaxy/a-b/1"; // need to extract 1.
String str1 = "foo/bar/Samsung-Galaxy/c-d/1#P2";// need to extract 2.
String str2 = "foo.com/Samsung-Galaxy/9090/c-d/69"; // need to extract 69

System.out.println("result " + pattern.matcher(str).matches());
System.out.println("result " + pattern.matcher(str1).matches());
System.out.println("result " + pattern.matcher(str1).matches());

以上所有 SOP 均返回 false。我正在使用 java 8,有什么方法可以在单个语句中匹配模式,然后从字符串中提取数字

如果有人能指导我如何调试/开发正则表达式,我会非常高兴。如果我的问题中有不清楚的地方,请随时告诉我。

最佳答案

您可以使用

Pattern pattern = Pattern.compile(".*/(?:a-b|c-d|e-f)/[^/]*?([0-9]+)");

请参阅regex demo

当与 matches() 一起使用时,上面的模式不需要显式 anchor 、^$

详细信息

  • .* - 除换行符之外的任何 0+ 个字符,尽可能多
  • / - 最右边的 / 后面跟着后续子模式
  • (?:a-b|c-d|e-f) - 与内部任何替代项匹配的非捕获组:a-bc-de-f
  • / - 一个 / 字符
  • [^/]*? - 除 / 之外的任何字符,尽可能少
  • ([0-9]+) - 第 1 组:一位或多位数字。

Java demo :

List<String> strs = Arrays.asList("foo/bar/Samsung-Galaxy/a-b/1","foo/bar/Samsung-Galaxy/c-d/1#P2","foo.com/Samsung-Galaxy/9090/c-d/69");
Pattern pattern = Pattern.compile(".*/(?:a-b|c-d|e-f)/[^/]*?([0-9]+)");
for (String s : strs) {
Matcher m = pattern.matcher(s);
if (m.matches()) {
System.out.println(s + ": \"" + m.group(1) + "\"");
}
}

使用相同正则表达式并添加 anchor 的替换方法:

List<String> strs = Arrays.asList("foo/bar/Samsung-Galaxy/a-b/1","foo/bar/Samsung-Galaxy/c-d/1#P2","foo.com/Samsung-Galaxy/9090/c-d/69");
String pattern = "^.*/(?:a-b|c-d|e-f)/[^/]*?([0-9]+)$";
for (String s : strs) {
System.out.println(s + ": \"" + s.replaceFirst(pattern, "$1") + "\"");
}

参见another Java demo .

输出:

foo/bar/Samsung-Galaxy/a-b/1: "1"
foo/bar/Samsung-Galaxy/c-d/1#P2: "2"
foo.com/Samsung-Galaxy/9090/c-d/69: "69"

关于java - 需要正则表达式匹配方面的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52945410/

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