gpt4 book ai didi

c# - 如何匹配一个字符串,但前提是同一字符串尚未匹配或不匹配破折号?

转载 作者:行者123 更新时间:2023-11-30 12:43:51 27 4
gpt4 key购买 nike

我有一个案例,我正在尝试使用正则表达式进行匹配。

我当前的表达式将匹配带有或不带有破折号的特定格式的字符串。我想添加它以仅在之前未匹配字符串(有或没有破折号)的情况下进行匹配。例如,采取以下情况:

1.  1234-56-789-5555
2. 1234567895555
3. 0000-99-888-3333
4. 1111223334444

如果上面的四个示例以相同的顺序出现在列表、文档等中,我只想捕获 (1, 3, 4)。我想跳过 #2,因为它已经被 #1 捕获,但带有破折号。如果#2 先来,我会想同样跳过#1。

这是我当前使用的表达式:

\d\d\d\d-*\d\d-*\d\d\d-*\d\d\d\d

我试图阅读 look behinds(我对 Regex 相当缺乏经验),但我真正理解的是,look behind 仅检查某些文本之前是否匹配。我不确定我想要的是否可以与此结合;我只看到如何检查特定文本,而不是检查带/不带破折号的当前值。

我目前正在使用 C# 逻辑执行此操作,但我正在尝试查看它是否可以纯粹在 Regex 中完成。如果做不到,那也没关系;在这种情况下,我只是想加强我的 Regex 知识。

这可能吗——我怎样才能做到这一点?

最佳答案

如果您只想获取每个数字的第一次出现(回答我想跳过#2,因为它已经被#1 捕获,但带有破折号),您需要一个否定的外观-后面有一个RegexOptions.RightToLeftRegexOptions.Singleline选项:

(?<!\b\1-?\2-?\3-?\4\b.*)\b(\d{4})-?(\d{2})-?(\d{3})-?(\d{4})\b

\b(\d{4})-?(\d{2})-?(\d{3})-?(\d{4})\b subpattern 是带有捕获组的数字,用于检查它们是否存在,而不管字符串前面的连字符如何。

(?<!\b\1-?\2-?\3-?\4\b.*)子模式后视正在检查我们是否没有其他相同字符串的出现。

测试于 regexhero.net在 Expresso 中:

enter image description here

enter image description here

关于c# - 如何匹配一个字符串,但前提是同一字符串尚未匹配或不匹配破折号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30130158/

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