具有等号的正则表达式问题?

时间:2013-12-24 00:23:49

标签: c# regex

在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”,那么它是假的。我希望@和=之间的字符能够是任何字母数字值。 =符号后面的任何内容都可以包含字母数字和'(单引号)。我在这做错了什么。我很少使用正则表达式,通常可以找到示例,这是自定义格式,即使是使用备忘单,我也遇到了问题。

4 个答案:

答案 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)

\w+代替\w用于一个或多个字符。或\w*获得零或更多:

试试这个:Live demo

^([Ii]|[Oo])@\w+=\'*\w+\'*

答案 2 :(得分:1)

如果您对使用paramname更加严格:

^([Ii]|[Oo])@paramname=[']?[\w]+[']?

Here is a demo

答案 3 :(得分:1)

您可以尝试这样的事情:

Regex rx = new Regex( @"^([IO])@(\w+)=(.*)$" , RegexOptions.IgnoreCase ) ;
  • 匹配组1会给出I或O的值(参数方向?)
  • 匹配组2将为您提供参数名称
  • 匹配组3将为您提供参数
  • 的值

你可能对第3组更加严格,并将其匹配为

(([^']+)|('(('')|([^']+))*'))

第一个选项匹配1个或多个非引用字符;第二个替代匹配一个带引号的字符串文字与任何内部(嵌入)引号通过加倍它们来逃避,所以它会匹配像

这样的东西
  • ''(空字符串
  • 'foo bar'
  • 'That''s All, Folks!'