.NET C#两类正则表达式创建需求:验证与分组提取
嘿,这两个正则需求我熟,直接给你.NET C#里能用的实现方案,分验证和提取两部分说:
1. 输入格式验证正则
首先要满足的规则是:输入必须包含至少一个/TEXT;dd-mm-yyyy;TEXT格式的片段,且TEXT部分不能包含/。对应的正则表达式如下:
^.*(/[^/]+;\d{2}-\d{2}-\d{4};[^/]+)+.*$
正则各部分解释:
^.*:匹配输入开头的任意内容(允许为空)(/[^/]+;\d{2}-\d{2}-\d{4};[^/]+):核心匹配单元/:固定的起始分隔符[^/]+:匹配第一段TEXT,[^/]表示排除/,+确保至少有一个字符;\d{2}-\d{2}-\d{4};:匹配dd-mm-yyyy格式的日期,\d{2}匹配两位数字[^/]+:匹配第二段TEXT,同样排除/且至少一个字符
+:确保上述核心单元至少出现一次.*$:匹配输入结尾的任意内容(允许为空)
C# 使用示例:
using System.Text.RegularExpressions; string validationPattern = @"^.*(/[^/]+;\d{2}-\d{2}-\d{4};[^/]+)+.*$"; // 符合规则的输入 string validInput = "前置文本 /UserName;20-02-1997;UserAddress 后置文本 /ID;15-08-2000;UserCode"; // 不符合规则的输入(TEXT含/) string invalidInput = "Invalid /Name/Test;01-01-2000;Address"; bool isValid1 = Regex.IsMatch(validInput, validationPattern); // 返回 true bool isValid2 = Regex.IsMatch(invalidInput, validationPattern); // 返回 false
如果需要更严格的日期有效性检查(比如限制月份为01-12,日期为01-31),可以把日期部分的正则调整为:
(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-\d{4}
对应的完整验证正则就变成:
^.*(/[^/]+;(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-\d{4};[^/]+)+.*$
2. 提取分组内容的正则
要提取每个/TEXT;dd-mm-yyyy;TEXT片段中的三个分组(第一段TEXT、日期、第二段TEXT),我们可以用带捕获组的正则:
/([^/]+);(\d{2}-\d{2}-\d{4});([^/]+)
捕获组说明:
Groups[1]:第一段TEXT内容Groups[2]:日期字符串Groups[3]:第二段TEXT内容
C# 使用示例:
using System.Text.RegularExpressions; string extractionPattern = @"/([^/]+);(\d{2}-\d{2}-\d{4});([^/]+)"; string input = "订单信息 /OrderNo;10-05-2024;OrderDesc 客户信息 /CustName;25-12-2023;CustAddr"; MatchCollection matches = Regex.Matches(input, extractionPattern); foreach (Match match in matches) { if (match.Success) { string firstText = match.Groups[1].Value; string date = match.Groups[2].Value; string secondText = match.Groups[3].Value; Console.WriteLine($"片段:第一段文本={firstText},日期={date},第二段文本={secondText}"); } }
输出结果:
片段:第一段文本=OrderNo,日期=10-05-2024,第二段文本=OrderDesc 片段:第一段文本=CustName,日期=25-12-2023,第二段文本=CustAddr
如果允许TEXT部分为空(比如/;01-01-2000;这种情况),只需要把正则里的[^/]+改成[^/]*即可,这样就能匹配空文本了。
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

