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

Sco*_*ott 9 .net c# regex

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

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

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

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

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

SLa*_*aks 20

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

请注意,您需要将括号转义为\\(\\).(或\(\)在一个@""字符串)


pol*_*nts 8

准点

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

在C#中,这是使用指定的RegexOptions.Singleline.您也可以将其嵌入(?s)模式中.

参考


关于元字符和转义

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

(   )   {   }   [   ]   ?   *   +   -   ^   $   .   |   \
Run Code Online (Sandbox Code Playgroud)

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

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

"c:\\Docs\\Source\\a.txt"
@"c:\Docs\Source\a.txt"
Run Code Online (Sandbox Code Playgroud)

由于\在正则表达式中使用了很多,@因此通常使用-quoting来避免过度加倍.

参考


关于角色类

正则表达式引擎允许您定义字符类,例如[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 )
Run Code Online (Sandbox Code Playgroud)

Note that I've modified the pattern slightly so that it uses negated character class instead of reluctance wildcard matching. This causes a slight difference in behavior if you allow ' to be escaped in your input string, but neither pattern handle this case perfectly. If you're not allowing ' to be escaped, however, this pattern is definitely better.

References