我正在使用这个正则表达式
string expression = "q(\\d+)(M){0,1}(T){0,1}(W){0,1}(TH){0,1}(F){0,1}(S){0,1}(SU){0,1}";
考虑一周中的几天。
M, T, W, TH, F, S, SUN
每当我们输入任何字符串时,我们想要提取一周中的第一个模式并忽略另一个。
让我举个例子
如果输入字符串为:q10MTWTHFSSUN465689213MTWSU45454
,则输出应为q10MTWTHFSSUN
输入字符串= q10MSSUN454545asdasdsaMTWTHUR
输出应为q10MSSUN
CODE
string expression = "q(\\d+)(M){0,1}(T){0,1}(W){0,1}(TH){0,1}(F){0,1}(S){0,1}(SU){0,1}";
Console.Write("\nEnter string:");
string value = Console.ReadLine();
var result = Regex.Match(value, expression, RegexOptions.IgnoreCase);
if (result != null)
{
Console.Write(result.ToString());
}
我尝试了上述模式,但在某些场景中失败了。
FAILING SCENARIO
输入字符串q10THSSUN454545asd
输出应为q10THSSUN
,但它会以q10T
形式显示,因为TH
Tuesday
视为T
答案 0 :(得分:1)
试试这个:
q(\\d+)(M){0,1}(T(?!H)){0,1}(W){0,1}(TH){0,1}(F){0,1}(S(?!U)){0,1}(SU){0,1}
用于匹配' T'的正则表达式如果下面的字母是' H' (以便TH优先)。周六和周日也一样。
为简洁起见,您也可以将{0,1}
替换为?
,但这只是一个偏好问题,真的。