You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:23:54