试图在C#中使用通配符来从网页源中获取信息,但我似乎无法弄清楚要使用什么作为通配符.我没有尝试过任何作品!
通配符只需要允许数字,但由于页面每次生成相同,我也可以允许任何字符.
正在使用的正则表达式声明:
Regex guestbookWidgetIDregex = new Regex("GuestbookWidget(' INSERT WILDCARD HERE ', '(.*?)', 500);", RegexOptions.IgnoreCase);Run Code Online (Sandbox Code Playgroud)
如果有人能弄清楚我做错了什么,我将不胜感激!
SLa*_*aks 20
通配符是..
要匹配任意数量的任意字符,请使用.* (表示零或更多.)或.+(表示一个或多个.)
请注意,您需要将括号转义为\\(和\\).(或\(和\)在一个@""字符串)
在正则表达式中,点几乎.匹配任何字符.它通常不匹配的唯一字符是换行符.要使点匹配所有字符,必须启用所谓的单行模式(也称为"全点").
在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.