如何在C#正则表达式语句中指定通配符(匹配任意字符)?

11
尝试在 C# 中使用通配符从网页源代码中获取信息,但我似乎无法找到可用作通配符的字符。无论我尝试什么都不起作用!通配符只需要允许数字,但由于页面每次生成都是相同的,因此也可以允许任何字符。正在使用的正则表达式语句:
Regex guestbookWidgetIDregex = new Regex("GuestbookWidget(' INSERT WILDCARD HERE ', '(.*?)', 500);", RegexOptions.IgnoreCase);

如果有人能找出我哪里做错了,那将不胜感激!

2个回答

26
通配符字符是.
为了匹配任意数量的任意字符,请使用.*(表示零个或多个.)或.+(表示一个或多个.)。
请注意,您需要转义括号,如\\(\\)。(或在@""字符串中使用\(\)

嗯,好的了解。所以,如果通配符是用于检查像425243这样的数字,使用.+*? - Scott
要匹配一个数字,请使用\d+。(在@""字符串内部) - SLaks
好的,明白了!非常感谢SLaks。 - Scott
我明天会检查这个答案,现在我要去睡觉了。 - Scott

9

点操作符

在正则表达式中,点 . 匹配几乎任何字符。唯一不匹配的字符是换行符。要使点匹配所有字符,必须启用所谓的单行模式(也称为“点全部”)。

在C#中,可以使用 RegexOptions.Singleline 来指定。您还可以将其嵌入模式中,如 (?s)

参考资料


关于元字符和转义

.并不是唯一的正则表达式元字符。其他的元字符包括:

(   )   {   }   [   ]   ?   *   +   -   ^   $   .   |   \

根据它们出现的位置,如果您希望这些字符意味着字面意义(例如“.”作为句号),则您可能需要进行所谓的“转义”。这是通过在字符前加上“\”来完成的。
当然,对于C#字符串文字,"\\"也是转义字符。要获得字面意义的"\\",您需要在字符串文字中将其加倍(即"\\"是长度为一的字符串)。或者,C#还具有所谓的@-quoted字符串文字,其中不处理转义序列。因此,以下两个字符串相等:
"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"

由于在正则表达式中经常使用\,因此通常使用@引用来避免过度重复。

参考资料


关于字符类

正则表达式引擎允许您定义字符类,例如[aeiou]是包含5个元音字母的字符类。您还可以使用-元字符来定义范围,例如[0-9]是包含所有10个数字字符的字符类。

由于数字字符使用非常频繁,因此正则表达式还提供了一种简写符号,即\d。在C#中,这也将匹配其他Unicode字符集中的十进制数字,除非您使用RegexOptions.ECMAScript,否则它严格只匹配[0-9]

参考文献

相关问题


将所有内容整合起来

看起来以下内容适用于您:

      @-quoting          digits_      _____anything but ', captured
          |                   / \    /     \
new Regex(@"GuestbookWidget\('\d*', '([^']*)', 500\);", RegexOptions.IgnoreCase);
                           \/                     \/
                         escape (              escape )

请注意,我已经稍微修改了模式,使其使用否定字符类而不是勉强通配符匹配。如果您允许在输入字符串中转义 ',则这会导致行为上的轻微差异,但是两种模式都不能完美处理此情况。但是,如果您不允许转义 ',则这种模式绝对更好。

参考资料


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接