c#正则表达式查找并提取给定长度的个数

c#正则表达式查找并提取给定长度的个数,c#,regex,C#,Regex,我有一个字符串,例如: “2015年11月12日:Liefertermin 71994:30.11.2015->27.11.2015” 我想提取子串71994,它总是5位数 我尝试了以下方法,但没有成功: private string FindDispo_InInfo() { Regex pattern = new Regex("^[0-9]{5,5}$"); Match match = pattern.Match(textBox1.Text);

我有一个字符串,例如:

“2015年11月12日:Liefertermin 71994:30.11.2015->27.11.2015”

我想提取子串71994,它总是5位数

我尝试了以下方法,但没有成功:

 private string FindDispo_InInfo()
    {
        Regex pattern = new Regex("^[0-9]{5,5}$");
        Match match = pattern.Match(textBox1.Text);

        string stDispo = match.Groups[0].Value;
        return stDispo;
    }

您需要的是
(\d{5})
,它将捕获长度为5的数量您需要的是
(\d{5})
,它将捕获长度为5的数量替换锚定
^
$
为单词边界
\b
,并使用逐字字符串文字:

Regex pattern = new Regex(@"\b[0-9]{5}\b");
您可以使用
match.value
访问该值:

string stDispo = match.Value;
固定代码:

private static string FindDispo_InInfo(string text)
{
    Regex pattern = new Regex(@"\b[0-9]{5}\b");
    Match match = pattern.Match(text);
    if (match.Success)
        return match.Value;
    else
        return string.Empty;
}
这是一个:


但是,在方法内部创建regex对象可能会导致效率低下。最好将其声明为静态私有只读字段,然后根据需要在方法内多次使用。

用单词边界替换锚定
^
$
,并使用逐字字符串文字:

Regex pattern = new Regex(@"\b[0-9]{5}\b");
您可以使用
match.value
访问该值:

string stDispo = match.Value;
固定代码:

private static string FindDispo_InInfo(string text)
{
    Regex pattern = new Regex(@"\b[0-9]{5}\b");
    Match match = pattern.Match(text);
    if (match.Success)
        return match.Value;
    else
        return string.Empty;
}
这是一个:


但是,在方法内部创建regex对象可能会导致效率低下。最好将其声明为静态私有只读字段,然后根据需要在方法内部多次使用。

删除字符串开头和结尾的锚定
\d{5}
应该可以。删除字符串开头和结尾的锚定
\d{5}
应该可以做到这一点。注意
{5,5}
=
{5}
。另外,
^
匹配字符串的开头,
$
匹配字符串的结尾,因此,您的正则表达式无法匹配输入。另外,只要
\d{5}
也将匹配
123456
中的
12345
,它可能不是您所期望的,这就是为什么我建议使用要求非单词字符位于5位序列两侧的单词边界。您的答案最完整,更符合我的需要。另一点:如果数字可以粘在字母或下划线上,
\b
将不会返回这些匹配项。您将需要
Regex pattern=newregex(@“(?注意
{5,5}
=
{5}
)。此外,
^
匹配字符串的开头,
$
匹配字符串的结尾,因此,您的Regex无法匹配输入。另外,只需
\d{5}
也将匹配
123456
中的
12345
,这可能不是您所期望的,这就是为什么我建议使用单词边界,要求非单词字符位于5位序列的两侧。您的答案最完整,更符合我的需要另一点:如果数字可以粘在字母或下划线上,
\b
将不会返回这些匹配项。您需要
Regex模式=新的Regex(@“(?)?