C# 如何获得整个字符串而不是部分字符串的匹配?

C# 如何获得整个字符串而不是部分字符串的匹配?,c#,regex,C#,Regex,我有一个正则表达式列表,我通过它迭代查找字符串的匹配模式 我想得到与“00000.00”完全匹配的正则表达式的索引,即1。但是,0的正则表达式也会返回true,但只有当存在长度为5或6的数字或字符串时,才应返回true 也就是说,12345和123456应该有效,但12345.0或123456.0不应该有效 List<Regex> regexPatterns = new List<Regex>{ new Regex(@"\b\d{5,6}\b"),

我有一个正则表达式列表,我通过它迭代查找字符串的匹配模式

我想得到与“00000.00”完全匹配的正则表达式的索引,即1。但是,0的正则表达式也会返回true,但只有当存在长度为5或6的数字或字符串时,才应返回true

也就是说,12345和123456应该有效,但12345.0或123456.0不应该有效

List<Regex> regexPatterns = new List<Regex>{
    new Regex(@"\b\d{5,6}\b"),              // 0
    new Regex(@"\b\d{5,6}[.](00)\b")        // 1
}

string text = "00000.00";

for( int i = 0; i < regexPatterns.Count; i++ ) {
    if( regexPatterns.IsMatch(text) ) return i;
}
List regexpaterns=新列表{
新的正则表达式(@“\b\d{5,6}\b”),//0
新的正则表达式(@“\b\d{5,6}[。](00)\b”)//1
}
string text=“00000.00”;
for(int i=0;i
当我希望它返回1时,它一直返回00000.00的0


**索引是有意义的,所以对它们重新排序是不可能的。

请尝试
^
$
作为字符串的开头和结尾:

List<Regex> regexPatterns = new List<Regex>{
    new Regex(@"^\d{5,6}$"),              // 0
    new Regex(@"^\d{5,6}[.](00)$"),       // 1
}
List regexpaterns=新列表{
新的正则表达式(@“^\d{5,6}$”),//0
新的正则表达式(@“^\d{5,6}[。](00)$”),//1
}
见:

^
匹配必须从字符串或行的开头开始

$
匹配必须出现在字符串末尾或行或字符串末尾的
\n
之前


由于句点将充当单词边界,所以最好从最复杂的模式扫描到最简单的模式。你可以做你的for循环减量来实现这一点,但是另一种考虑的方法是使用你的模式字典,而值组件是返回值。
var patterns = new Dictionary<string, int>
    {
        { @"\b\d{5,6}\b", 0 },
        { @"\b\d{5,6}[.](00)\b", 1 },
    };

string text = "00000.00";

foreach (var pattern in patterns.Keys)
{
    if (pattern.IsMatch(text))
        return patterns[pattern];
}
var模式=新字典
{
{@“\b\d{5,6}\b”,0},
{@“\b\d{5,6}[.(00)\b”,1},
};
string text=“00000.00”;
foreach(patterns.Keys中的var模式)
{
if(模式IsMatch(文本))
返回模式[模式];
}

检查第一个周期中是否没有句点:

List<Regex> regexPatterns = new List<Regex>{
    new Regex(@"\d{5,6}[^.]"),              // 0
    new Regex(@"\d{5,6}[.](00)")        // 1
}

string text = "00000.00";

for( int i = 0; i < regexPatterns.Count; i++ ) {
    if( regexPatterns.IsMatch(text) ) return i;
}
List regexpaterns=新列表{
新的正则表达式(@“\d{5,6}[^.]”),//0
新正则表达式(@“\d{5,6}[.](00)”)//1
}
string text=“00000.00”;
for(int i=0;i
一些解释会更好,我相信这是正确的答案。@user3228667您可能做错了什么。我刚试过,效果很好。@user3228667还可以尝试在。在[]中,根据StuffInterests的评论。实际上,它似乎正在我的程序中工作,但仍然没有在regexr.com上为我突出显示。谢谢你的回答!哦,刚刚在网站上运行。必须先删除文本框中的所有内容。谢谢你是最棒的!我认为你这里的问题是句号充当单词边界,导致匹配发生在你的第一个表达式上。如果您可以反转表达式并首先测试较长的表达式,那么您应该得到一个匹配项。