我正在运行的正则表达式:id=(.*?)
但它可以捕获像
widget_id="dsadsadsadsadsadsa"
注意:id前面有一个空格。我尝试添加\s*
?在re
的开头。仍然没有运气。
答案 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=...
。