如何在c#regex语句中指定通配符(对于任何字符)?

时间:2010-06-14 00:53:15

标签: c# .net regex

尝试在C#中使用通配符从网页源中获取信息,但我似乎无法弄清楚要使用什么作为通配符。我没有尝试过任何工作!

通配符只需要允许数字,但由于页面生成相同的次,我也可以允许任何字符。

正在使用的正则表达式声明:

Regex guestbookWidgetIDregex = new Regex("GuestbookWidget(' INSERT WILDCARD HERE ', '(.*?)', 500);", RegexOptions.IgnoreCase);

如果有人能弄清楚我做错了什么,我们将不胜感激!

2 个答案:

答案 0 :(得分:14)

通配符是. 要匹配任意数量的任意字符,请使用.*(表示零个或多个.)或.+(表示一个或多个.

请注意,您需要将括号转义为\\(\\)。 (或\(字符串中的\)@""

答案 1 :(得分:7)

点上

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

在C#中,这是使用RegexOptions.Singleline指定的。你也可以在模式中embed this as (?s)

参考


关于元字符和转义

.不是唯一的正则表达式元字符。他们是:

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

根据它们出现的位置,如果您希望这些字符代表字面意思(例如.作为句点),您可能需要执行所谓的“转义”。这是通过在角色前加\来完成的。

当然,\也是C#字符串文字的转义字符。要获得文字\,您需要在字符串文字中加倍(即"\\"是一个长度为1的字符串)。或者,C#也有所谓的@ - 引用的字符串文字,其中不处理转义序列。因此,以下两个字符串是相同的:

"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 )

请注意,我稍微修改了模式,因此它使用了否定字符类而不是磁阻通配符匹配。如果允许在输入字符串中转义',这会导致行为略有不同,但这两种模式都不能完美地处理这种情况。但是,如果您不允许'转义,则此模式肯定会更好。

参考