C#中的正则表达式给出了错误的结果

时间:2015-08-29 11:44:02

标签: c# regex

我正在运行的正则表达式:id=(.*?) 但它可以捕获像

这样的事件
widget_id="dsadsadsadsadsadsa"

注意:id前面有一个空格。我尝试添加\s*?在re的开头。仍然没有运气。

2 个答案:

答案 0 :(得分:2)

您必须使用RegexOptions.IgnorePatternWhitespace选项,因为这会导致忽略模式中的空格。

如果必须有此选项,则可以转义空格,使模式为“\ id =(。*?)”。

<强> 更新

如果在c#字符串文字中声明这个,那么你需要转义反斜杠:

string pattern = "\\ id=(.*?)";

这样,c#编译器会将双反斜杠转换为单个反斜杠,然后正则表达式所见的模式将是“\ id =(。*?)”

或者,如果您将此声明为 verbatim 字符串文字,那么这将是:

string pattern = @"\ id=(.*?)";

答案 1 :(得分:1)

\s*?匹配零个或多个空格,因此不会阻止正则表达式匹配id=...前面的前缀。

如果您希望id=...没有前缀,请使用字边界\b锚点,如下所示:

"\bid=(.*?)"

这可以确保widget_id=之类的内容不匹配。与id前面有空格的表达式不同,此表达式在输入开头也会匹配id=...