c#regex for number / number / string pattern

时间:2015-05-07 12:07:26

标签: c# regex

我试图找到{a number} / { a number } / {a string}模式。我可以让number / number工作,但是当我添加/ string时却没有。

我试图找到的例子:

15/00969/FUL

我的正则表达式:

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

4 个答案:

答案 0 :(得分:7)

您应该使用+ quantifier表示1 or more times并且它适用于量词之前的模式,我会添加单词边界\b以仅匹配整个单词:

\b\d+/\d+/\w+\b

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

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

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

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

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

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

示例代码(同时使用未转义()引入的capturing groups):

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

输出:

enter image description here

答案 1 :(得分: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
}

答案 2 :(得分:3)

您缺少正则表达式中的量词

如果您想匹配1个或多个项目,请使用+。 如果您已经知道需要匹配的项目数,则可以使用{x}{x,y}为范围(xy为两个数字)指定

所以你的正则表达式会变成:

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

例如,如果您要匹配的所有元素都具有此格式({2 digit}/{5 digit}/{3 letters}),您可以写:

Regex reg = new Regex(@"\d/{2}\d{5}/\w{3}");

这将匹配15/00969/FUL

有关正则表达式的更多信息,请参见here

答案 3 :(得分: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