尝试在C#中使用通配符从网页源中获取信息,但我似乎无法弄清楚要使用什么作为通配符。我没有尝试过任何工作!
通配符只需要允许数字,但由于页面生成相同的每次,我也可以允许任何字符。
正在使用的正则表达式声明:
Regex guestbookWidgetIDregex = new Regex("GuestbookWidget(' INSERT WILDCARD HERE ', '(.*?)', 500);", RegexOptions.IgnoreCase);
如果有人能弄清楚我做错了什么,我们将不胜感激!
答案 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 )
请注意,我稍微修改了模式,因此它使用了否定字符类而不是磁阻通配符匹配。如果允许在输入字符串中转义'
,这会导致行为略有不同,但这两种模式都不能完美地处理这种情况。但是,如果您不允许'
转义,则此模式肯定会更好。