gpt4 book ai didi

java - 正则表达式:匹配组(如果存在)否则忽略并继续其他匹配

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:40 24 4
gpt4 key购买 nike

我一直在尝试匹配以下数据中的正则表达式模式:

字符串:

TestData to 1colon delimiter list has 1 rows.Set...value is: 1 Save Error: 267467374736437-TestInfo send Error

要匹配的单词:

  1. TestData
  2. 267467374736437-TestInfo

我正在使用的正则表达式模式:

(.+?\s)?.*(\s\d+-.*?\s)?

这里的场景是要匹配的字符串中可能不存在第二个匹配项 (267467374736437-TestInfo)。所以,我希望它是一个匹配(如果存在),否则继续其他匹配。因此我添加了零个或一个匹配量词?到上面的组模式。但随后它会忽略第二组。

如果我使用以下模式:

`(.+?\s)?.*(\s\d+-.*?\s)`

它匹配得很好,但如果匹配字符串中的字符串“267467374736437-TestInfo”则失败,因为它没有“?”量词。

请帮我理解哪里出了问题。

最佳答案

我宁愿不使用复杂的正则表达式,这会很丑陋并且是维护的噩梦。相反,一种简单的方法是分割字符串并获取第一个术语,然后使用智能正则表达式来精确定位第二个术语。

String input = "TestData to 1colon delimiter list has 1 rows.Set...value is: 1 Save Error: 267467374736437-TestInfo send Error";
String first = input.split(" ")[0];
String second = input.replaceAll(".*Save Error:\\s(.*)?\\s", "$1");

探索正则表达式:

Regex101

关于java - 正则表达式:匹配组(如果存在)否则忽略并继续其他匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566995/

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