我一直在尝试匹配以下数据中的正则表达式模式:
字符串:
TestData to 1colon delimiter list has 1 rows.Set...value is: 1 Save Error: 267467374736437-TestInfo send Error
要匹配的单词:
- TestData
- 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");
探索正则表达式:
关于java - 正则表达式:匹配组(如果存在)否则忽略并继续其他匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37566995/