gpt4 book ai didi

regex - 匹配字符(如果存在),否则继续

转载 作者:行者123 更新时间:2023-12-03 03:34:59 26 4
gpt4 key购买 nike

演示:https://regex101.com/r/5EVbAJ/1

我有这个正则表达式:

a.+?(W)?.*?(\d)

我的意图是:如果字符存在于字符串中,则将字符W作为组。否则返回空组。第二组是需要匹配的现有号码。

我的测试数据:
1. a,W1
2. a W1
3. a,W 1
4. a, V1

5. a, W1 //fail

1-3之所以起作用,是因为 aW之间只有一个字符(我相信这是由于懒惰的 +?运算符)。 4有效,因为不需要匹配 W

但是5不起作用:数字组正确匹配,但是 W组为空,尽管 W出现在 aW之间,且有2个字符。

我该如何解决?

最佳答案

您可以使用

a(?:.+?(W))?.*?(\d)

在这里,技巧是在 .+(W)模式部分周围使用一个非捕获组,以使正则表达式引擎至少与该模式匹配一​​次。这意味着将 (W)设置为强制模式,因此,如果 W之后的除换行符以外的任何1个或多个字符之后出现 a,则将填充第1组。

Dart 测试:
final regex = RegExp(r'a(?:.+?(W))?.*?(\d)');
Iterable<Match> matches = regex.allMatches("5. a, W1");
for (Match match in matches) {
print(match.group(1)); // => W
print(match.group(2)); // => 1
}

关于regex - 匹配字符(如果存在),否则继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61655527/

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