c#正则表达式查找并提取给定长度的个数
我有一个字符串,例如: “2015年11月12日:Liefertermin 71994:30.11.2015->27.11.2015” 我想提取子串71994,它总是5位数 我尝试了以下方法,但没有成功: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);
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(@“(?)?