C#正则表达式用于匹配数字/数字/字符串模式

4

我正在尝试查找{数字} / {数字} / {字符串}模式。我可以找到数字 / 数字,但是当我添加/ 字符串时就不行了。

我正在尝试查找的示例:

15/00969/FUL

我的正则表达式:

Regex reg = new Regex(@"\d/\d/\w");
4个回答

8
您应该使用加号“+” 量词,它表示匹配前一个模式1次或多次,并且它适用于量词之前的模式。我建议在正则表达式中添加单词边界符“\b”,只匹配整个单词:
\b\d+/\d+/\w+\b

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

var rx = new Regex(@"\b\d+/\d+/\w+\b");

如果你想准确地指定与某个模式相对应的字符数,你可以使用{}

\b\d{2}/\d{5}/\w{3}\b

最后,如果你的字符串中只包含字母,在C#中可以使用\p{L}(或\p{Lu} 仅匹配大写字母)这个速记类:

\b\d{2}/\d{5}/\p{L}{3}\b

示例代码 (还包括使用未转义的()引入的捕获组的功能。):

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();

输出:

在这里输入图片描述


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

完整示例:

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
}

1
你应该在你的回答中解释如何回答这个问题。 - Sayse

3

你的正则表达式缺少量词。

如果你想匹配一个或多个项,应该使用+。 如果你已经知道需要匹配的项目数量,可以使用{x}{x,y}指定范围(xy是两个数字)。

因此,你的正则表达式将变为:

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

例如,如果您想匹配的所有元素都具有以下格式({2位数字}/{5位数字}/{3个字母}),则可以编写以下代码:
Regex reg = new Regex(@"\d/{2}\d{5}/\w{3}");

这将与15/00969/FUL匹配。

关于正则表达式的更多信息可以在这里找到。


2
bool match = new Regex(@"[\d]+[/][\d]+[/][\w]+").IsMatch("15/00969/FUL"); //true

正则表达式:

[\d]+ //one or more digits
[\w]+ //one or more alphanumeric characters
[/]   // '/'-character

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接