在C#中我试图验证一个看起来像的字符串:
I@paramname='test'
或
O@paramname=2827
这是我的代码:
string t1 = "I@parameter='test'";
string r = @"^([Ii]|[Oo])@\w=\w";
var re = new Regex(r);
如果我从结尾或变量r取“= \ w”,我得到True。如果我在\ w之后添加“= \ w”,那么它是假的。我希望@和=之间的字符能够是任何字母数字值。 =符号后面的任何内容都可以包含字母数字和'(单引号)。我在这做错了什么。我很少使用正则表达式,通常可以找到示例,这是自定义格式,即使是使用备忘单,我也遇到了问题。
答案 0 :(得分:5)
^([Ii]|[Oo])@\w+=(?<q>'?)[\w\d]+\k<q>$
正则表达式:
^ start of line
([Ii]|[Oo]) either (I or i) or (O or o)
\w+ 1 or more word characters
= equals sign
(?<q>'?) capture 0 or 1 quotes in named group q
[\w\d]+ 1 or more word or digit characters
\k<q> repeat of what was captured in named group q
$ end of line
答案 1 :(得分:2)
答案 2 :(得分:1)
答案 3 :(得分:1)
您可以尝试这样的事情:
Regex rx = new Regex( @"^([IO])@(\w+)=(.*)$" , RegexOptions.IgnoreCase ) ;
你可能对第3组更加严格,并将其匹配为
(([^']+)|('(('')|([^']+))*'))
第一个选项匹配1个或多个非引用字符;第二个替代匹配一个带引号的字符串文字与任何内部(嵌入)引号通过加倍它们来逃避,所以它会匹配像
这样的东西''
(空字符串'foo bar'
'That''s All, Folks!'