gpt4 book ai didi

c# - 用正则表达式匹配一次

转载 作者:太空狗 更新时间:2023-10-29 22:36:48 26 4
gpt4 key购买 nike

将 M、T、W、TH、F、S、SU 视为一周中的几天。

我有正则表达式,除了没有工作日序列的一种情况外,它运行良好,即没有 MTW , TH , F , S , SU 在字符串内的预期位置。

例如,q10MT 有效,但q10HT 无效。

下面是我的表情:

string expression = "q(\\d*)(M)?(T(?!H))?(W)?(TH)?(F)?(S(?!U))?(SU)?";

如果是q10MT,输出是q10MT,这是正确的,但是如果是q10HT,输出是q10 这是不正确的,当没有匹配项时,我的正则表达式应该不返回任何值或返回空字符串。

为了实现这一目标,我需要做出哪些改变?

最佳答案

您可以通过积极的展望来实现它:

q(\\d*)(?=(?:M|T(?!H)|W|TH|F|S(?!U)|SU))(M)?(T(?!H))?(W)?(TH)?(F)?(S(?!U))?(SU)?

或者,正如@Taemyr 指出的那样,一个较短的等价物

q(\\d*)(?=(?:M|TH?|W|TH|F|SU?))(M)?(T(?!H))?(W)?(TH)?(F)?(S(?!U))?(SU)?

这是一个demo

(?=(?:M|TH?|W|F|SU?)) 前瞻确保至少一个需要的值来自前瞻后的交替列表。

C# 正则表达式用法:

var rx = new Regex(@"q(\d*)(?=(?:M|TH?|W|TH|F|SU?))(M)?(T(?!H))?(W)?(TH)?(F)?(S(?!U))?(SU)?");
var result = rx.Match("q10MSUT").Value;

结果:

enter image description here

关于c# - 用正则表达式匹配一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31243115/

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