c#regex用于数字/数字/字符串模式

Tho*_*mes 4 c# regex

我想找到{a number} / { a number } / {a string}模式.我可以开始number / number工作,但是当我添加/ string它时却没有.

我想要找到的例子:

15/00969/FUL
Run Code Online (Sandbox Code Playgroud)

我的正则表达式:

Regex reg = new Regex(@"\d/\d/\w");
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 8

你应该使用+ 量词,这意味着1 or more times它适用于量词之前的模式,我会添加单词边界\b只匹配整个单词:

\b\d+/\d+/\w+\b
Run Code Online (Sandbox Code Playgroud)

C#代码(使用逐字字符串文字,这样我们就可以从测试工具或服务中复制/粘贴正则表达式而不必转义反斜杠):

var rx = new Regex(@"\b\d+/\d+/\w+\b");
Run Code Online (Sandbox Code Playgroud)

如果要精确对应某些模式的字符数,可以使用{}s:

\b\d{2}/\d{5}/\w{3}\b
Run Code Online (Sandbox Code Playgroud)

最后,如果字符串中只有字母,则可以在C#中使用(或仅捕获大写字母)速记类:\p{L}\p{Lu}

\b\d{2}/\d{5}/\p{L}{3}\b
Run Code Online (Sandbox Code Playgroud)

示例代码(也包含非转义和引入的捕获组):()

var rx = new Regex(@"\b(\d{2})/(\d{5})/(\p{L}{3})\b");
var res = rx.Matches("15/00969/FUL").OfType<Match>()
                       .Select(p => new
                       {
                           first_number = p.Groups[1].Value,
                           second_number = p.Groups[2].Value,
                           the_string = p.Groups[3].Value
                       }).ToList();
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述


Gen*_*mer 5

Regex reg = new Regex(@"\d+/\d+/\w+");
Run Code Online (Sandbox Code Playgroud)

完整的例子:

Regex r = new Regex(@"(\d+)/(\d+)/(\w+)");

string input = "15/00969/FUL";
var m = r.Match(input);

if (m.Success)
{
    string a = m.Groups[1].Value;   // 15
    string b = m.Groups[2].Value;   // 00969
    string c = m.Groups[3].Value;   // FUL
}
Run Code Online (Sandbox Code Playgroud)