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标志会很方便,因为您使用的是捕获组,但在任何地方都没有使用捕获的值。