试图在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.
归档时间: |
|
查看次数: |
24146 次 |
最近记录: |