+正则表达式

时间:2012-07-18 17:43:13

标签: c# regex

我正在尝试从字符串中捕获一个值。字符串的格式应为

01+XXXX

我希望使用正则表达式捕获XXXX。这就是我提出的 -

01+\\s*(?<1>[.0-9]*)

但这不起作用。什么工作是 -

01+\\s*(?<1>[+.0-9]*)

唯一的区别是将+添加到字符类中。我的主要问题是 - 为什么第二个表达式起作用而第一个表达式不起作用?在第一个中,我寻找01+,其余的应该是[.0-9]。在我看来,第二个想读+两次 - 这不是它的作用吗?我对正则表达式很陌生,所以我觉得我可能会错过一些小的东西。

在此网站http://www.codeproject.com/Articles/9099/The-30-Minute-Regex-Tutorial上,它表示+用于“重复一次或多次”。那么它是不是一次尝试读取01+?

5 个答案:

答案 0 :(得分:6)

它正在读1一次或多次。也就是说,正则表达式01+匹配010110111等。

但它与+不匹配。如果您想匹配文字+,请为正则表达式写01\+01[+]

答案 1 :(得分:5)

+是一个特殊字符,意思是“一次或多次”。在这种情况下,它代表010110111等,而不是01+。如果你想按字面意思使用它,你需要逃避它,如下所示:\+

注意:看起来您正在使用字符串,因此您需要双重转义:\\+

它在字符类([+])内部工作,因为字符类从字面上理解大多数字符,包括\]等。

答案 2 :(得分:3)

'+'是正则表达式中的特殊字符,表示“1次或更多次”。所以你所写的意思是:

  • 字符'0'
  • 字符“1”一次或多次
  • 空格0次或以上

如果你想匹配一个文字加上你需要逃避它:

01\+\\s*(?<1>[.0-9]*)

答案 3 :(得分:1)

+quantifier,如您链接的教程中所述。所以,你的正则表达式意味着“匹配零,然后是一个或多个,然后是零或更多的空格,然后......”。

需要转义加号:

01\\+\\s*(?<1>[.0-9]*)

你的第二个正则表达式有效,因为+有character class的一部分而且不需要在那里进行转义。

答案 4 :(得分:0)

01\+(?<cap>[\d.]*)

解释

01                       '01'

\+                       '+'

[\d.]*                   any character of: digits (0-9), '.' 
                         (0 or more times, matching the most amount possible)