При попытке использовать подстановочный знак в C# для захвата информации из источника веб-страницы но я, может казаться, не выясняю, что использовать в качестве подстановочного символа. Ничто я попробовал работы!
Подстановочный знак только должен допускать числа, но поскольку страница сгенерирована тот же каждый раз, когда я могу также допускать любые символы.
Используемый оператор Regex:
Regex guestbookWidgetIDregex = new Regex("GuestbookWidget(' INSERT WILDCARD HERE ', '(.*?)', 500);", RegexOptions.IgnoreCase);
Если кто-либо может выяснить то, что я делаю неправильно, это значительно ценилось бы!
Подстановочный знак .
.
Чтобы сопоставить любое количество произвольных символов, используйте . *
(что означает ноль или более .
) или . +
(что означает один или несколько .
)
Обратите внимание, что вам нужно избегать скобок как \\ (
и \\)
. (или \ (
и \)
в строке @ ""
)
В регулярном выражении точка .
соответствует почти любому символу. Единственные символы, которые обычно не совпадают, - это символы новой строки. Чтобы точка соответствовала всем символам, необходимо включить так называемый однострочный режим (он же «точка все»).
В C # это указывается с помощью RegexOptions.Singleline
. Вы также можете встроить это как (? S)
в узор.
.
- не единственные метасимволы регулярных выражений. Это:
( ) { } [ ] ? * + - ^ $ . | \
В зависимости от того, где они появляются, если вы хотите, чтобы эти символы означали буквально (например, .
в виде точки), вам может потребоваться выполнить так называемое «экранирование» ". Для этого перед символом ставится \
.
Конечно, \
также является escape-символом для строковых литералов C #. Чтобы получить литерал \
, вам нужно удвоить его в строковом литерале (т.е. "\\"
- это строка длины, равной единице). В качестве альтернативы, C # также имеет так называемые строковые литералы в кавычках @
, в которых escape-последовательности не обрабатываются. Таким образом, следующие две строки равны:
"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 )
Обратите внимание, что я немного изменил шаблон, чтобы он использовал инвертированный символьный класс вместо подстановочных знаков сопротивления. Это вызывает небольшую разницу в поведении, если вы разрешаете экранирование '
во входной строке, но ни один из шаблонов не обрабатывает этот случай идеально. Однако, если вы не позволяете экранировать '
, этот шаблон определенно лучше.