C# 正则表达式字符串应仅包含双引号和逗号分隔的数字

C# 正则表达式字符串应仅包含双引号和逗号分隔的数字,c#,.net,regex,C#,.net,Regex,我有下面的字符串 "56565665,5656565,5656556" 我只想检查字符串必须只包含双引号、逗号和数字。 为此,我尝试创建一个regex^“\d+\,,但它只选择第一个字符串 我完全不熟悉正则表达式。您可以使用^”[\d,]+“$ 在这里看到了吗 在C#中,由于逃逸的chars,它看起来像这样 using System.Text.RegularExpressions ... Console.WriteLine(Regex.IsMatch(@"""56565665,5656565,

我有下面的字符串

"56565665,5656565,5656556"
我只想检查字符串必须只包含双引号、逗号和数字。

为此,我尝试创建一个regex
^“\d+\,
,但它只选择第一个字符串

我完全不熟悉正则表达式。

您可以使用
^”[\d,]+“$

在这里看到了吗

在C#中,由于逃逸的chars,它看起来像这样

using System.Text.RegularExpressions
...
Console.WriteLine(Regex.IsMatch(@"""56565665,5656565,5656556""", @"^""[\d,]+""$"));
Console.WriteLine(Regex.IsMatch(@"""56565665,5656565;5656556""", @"^""[\d,]+""$"));

由于评论中关于如何将其与变量一起使用的问题而更新:

var str = @"""56565665,5656565,5656556""";
// var str = "\"56565665,5656565,5656556\""; <- Alternative way of escaping "  

Console.WriteLine(Regex.IsMatch(str, @"^""[\d,]+""$"))
var str=@“56655655656556”;
//var str=“\”56566556556556\”;您可以使用
^”[\d,]+“$

在这里看到了吗

在C#中,由于逃逸的chars,它看起来像这样

using System.Text.RegularExpressions
...
Console.WriteLine(Regex.IsMatch(@"""56565665,5656565,5656556""", @"^""[\d,]+""$"));
Console.WriteLine(Regex.IsMatch(@"""56565665,5656565;5656556""", @"^""[\d,]+""$"));

由于评论中关于如何将其与变量一起使用的问题而更新:

var str = @"""56565665,5656565,5656556""";
// var str = "\"56565665,5656565,5656556\""; <- Alternative way of escaping "  

Console.WriteLine(Regex.IsMatch(str, @"^""[\d,]+""$"))
var str=@“56655655656556”;

//var str=“\”5656655656556556\”;试试这个,希望能奏效
“^[0-9,]+$”

试试这个,希望能奏效
“^[0-9,]+$”

您可以尝试以下模式:

 ^"[0-9]+(,[0-9]+)*"$
甚至

 \A"[0-9]+(,[0-9]+)*"\z //  Wiktor Stribiżew's idea, see his comment below 
例如

测试:

 "123"       - true  // just a number
 "123,456"   - true  // two numbers separated by comma
 "1,2,3,4"   - true  // four numbers separated by comma 
 ","         - false // just a comma, no numbers
 ",123"      - false // leading comma
 "123,"      - false // trailing comma
 "123,,456"  - false // double comma

您可以尝试以下模式:

 ^"[0-9]+(,[0-9]+)*"$
甚至

 \A"[0-9]+(,[0-9]+)*"\z //  Wiktor Stribiżew's idea, see his comment below 
例如

测试:

 "123"       - true  // just a number
 "123,456"   - true  // two numbers separated by comma
 "1,2,3,4"   - true  // four numbers separated by comma 
 ","         - false // just a comma, no numbers
 ",123"      - false // leading comma
 "123,"      - false // trailing comma
 "123,,456"  - false // double comma


如何使用它?`var pattern=“^”[\d,]+“$”;//这一行给出了错误
var pattern=@“^”[\d,]+“$”;
只是一个注释:
\d
匹配
[0-9]
、印地语、阿拉伯语以及.NET中的非数字。若要仅将0-9与
\d
匹配,请使用
RegexOptions.ECMAScript
标志编译正则表达式。@DAXaholic感谢您的更新。但我不能用您正确的方式硬编码它?当我使用
var str=“56566556565656556556”regex.IsMatch(@“+str+”,@“^”[\d,]+$”);
它只返回false.:(我做了另一次更新。如果字符串周围只有566556556556,即“no”,那么您可以通过@“”将它们添加到字符串的开头/结尾,但我不明白您为什么要这样做,因为这样您可以简单地调整正则表达式,使其不需要修改“围绕字符串。我如何使用它?`var pattern=“^”[\d,]+“$”;//这行给出了错误
var pattern=@“^”[\d,]+“$”;
只是一个注释:
\d
匹配
[0-9]
、印地语、阿拉伯语以及.NET中的非数字。若要仅将0-9与
\d
匹配,请使用
RegexOptions.ECMAScript
标志编译正则表达式。@DAXaholic感谢您的更新。但我不能用您正确的方式硬编码它?当我使用
var str=“56566556565656556556”regex.IsMatch(@“+str+”,@“^”[\d,]+$”);
它只返回false.:(我做了另一次更新。如果字符串周围只有566556556556,即“no”,那么您可以通过@“”将它们添加到字符串的开头/结尾,但我不明白为什么要这样做,因为这样您可以简单地调整正则表达式,使其不需要”围绕字符串。首先,您需要考虑有效和无效的匹配项。Regexp将完全依赖于此。例如,好的匹配项:
“12”
“1”
“1,2”
“123123”
“1,1,1”
。不好的匹配项:
“12”,
“1,2”
“s2”
12,12
,<1”
等等。一些方便的测试用例可能是
1“5,87”
“8766,87”
。我会使用
@“\A”[0-9]+(?:,[0-9]+)*”\z
还有,空字符串呢?正则表达式非常脆弱,只能“工作”当预先知道一整套需求时。首先你需要考虑有效和无效的匹配。Regexp将完全依赖于此。例如,好的匹配:
“12”
“1”
“1,2”
“123123”
“1,1,1”
。不好的匹配:
“12”
“1,2,”
“s2”
12,12
“5,87”
“8766,87”
。我会使用
“\A”“[0-9]+(?:,[0-9]*”,“\z”
,还有空字符串呢?正则表达式非常脆弱,只能“工作”当事先知道一整套要求时。感谢您的宝贵回答和解释!迪玛,这是我的建议。我只想使用
\a
\z
锚来确保我的字符串不会以LF结尾。您的正则表达式允许
“12,23\n”
@Wiktor Stribiżew:谢谢!捕捉到了细微的错误;我编辑了anser。好吧,这不是错误,只是一个轻微的更正。另外,Exlicit Capture标志会很方便,因为您使用的是捕获组,但没有在任何地方使用捕获的值。感谢您宝贵的回答和解释!Dima,这是我的建议。我只想使用
\A
\z
锚来确保我的字符串不会以LF结尾。您的正则表达式允许
“12,23\n”
@Wiktor Stribiżew:谢谢!捕捉到了细微的错误;我编辑了anser。这不是错误,只是一个轻微的更正。另外,Exlicit Capture标志会很方便,因为您使用的是捕获组,但在任何地方都没有使用捕获的值。