gpt4 book ai didi

java - 正则表达式捕获逻辑 OR 中的组

转载 作者:行者123 更新时间:2023-11-30 01:46:51 25 4
gpt4 key购买 nike

我有一组字符串需要解析并从中提取值。它们看起来像:

    /apple/1212d3fe 
/cat/23224a2f4
/auto/445478eefd
/somethingelse/1234fded

它应该只匹配 apple、cat 和 auto。我期望的输出是:

1212, d3fe
23224, a2f4
445478, eefd
null

我需要想出一个正则表达式来捕获组来执行相同的操作。我能够提取第二部分,但不能提取第一部分。我想出的最接近的是:

String r2 = "^/(apple/[0-9]{4}|cat/[0-9]{5}|auto/[0-9]{6})([a-f0-9]{4})$";
System.out.println(r2);

Pattern pattern2 = Pattern.compile(r2);

Matcher matcher2 = pattern2.matcher("/apple/2323efff");
if (matcher2.find()) {
System.out.println(matcher2.group(1));
System.out.println(matcher2.group(2));
}
<小时/>

更新的问题:

我有一组字符串需要解析并从中提取值。它们看起来像:

    /apple/1212d3fe 
/cat/23e24a2f4
/auto/df5478eefd
/somethingelse/1234fded

它应该只匹配 apple、cat 和 auto。我期望的输出是第二个“/”分割后的所有内容,如下所示:如果“apple”则为 4 个字符,如果“cat”则为 5 个字符,如果“auto”则为 6 个字符,如下所示:

1212, d3fe
23e24, a2f4
df5478, eefd
null

我需要想出一个正则表达式来捕获组来执行相同的操作。我能够提取第二部分,但不能提取第一部分。我想出的最接近的是:

String r2 = "^/(apple/[0-9]{4}|cat/[0-9]{5}|auto/[0-9]{6})([a-f0-9]{4})$";
System.out.println(r2);

Pattern pattern2 = Pattern.compile(r2);

Matcher matcher2 = pattern2.matcher("/apple/2323efff");
if (matcher2.find()) {
System.out.println(matcher2.group(1));
System.out.println(matcher2.group(2));
}
<小时/>

我可以在没有正则表达式 OR(|) 的情况下做到这一点,但当我包含它时它会中断。有关正确正则表达式的任何帮助吗?

最佳答案

更新的答案:

根据您更新的问题,您可以根据后向断言使用此正则表达式:

/((?<=apple/).{4}|(?<=cat/).{5}|(?<=auto/).{6})(.+)$

RegEx Demo

  • 此正则表达式在匹配 / 后使用 2 个捕获组
  • 在第一组中,我们有 3 个交替的回顾条件。
  • (?<=apple/).{4}确保我们匹配 4 个具有 apple/ 的字符在左侧。同样,我们匹配具有 cat/ 的 5 和 6 个字符串。和/auto/ .
  • 在第二个捕获组中,我们匹配行尾之前的剩余字符。

关于java - 正则表达式捕获逻辑 OR 中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57633035/

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