我正在尝试使用以下正则表达式获取谷歌中关键字的搜索位置:
string lookup = "(<h3 class=\"r\"><a href=\")(\\w+[a-zA-Z0-9.-?=/]*)";
但这对于有超级( - )的网址不起作用,如:
www.example-xyz.com
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:2)
使用反斜杠转义你的连字符并用另一个反斜杠转义逃避反斜杠:
string lookup = "(<h3 class=\"r\"><a href=\")(\\w+[a-zA-Z0-9.\\-?=/]*)";
答案 1 :(得分:1)
由于-
表示[]
范围内的范围,因此您需要使用反斜杠对其进行转义。
string lookup = "(<h3 class=\"r\"><a href=\")(\\w+[a-zA-Z0-9.\-?=/]*)";
顺便说一下,关于使用正则表达式匹配网址的stackoverflow有很多问题,搜索标记[regex]
和[url]
可以查看是否需要更精确的正则表达式。
答案 2 :(得分:1)
阅读一本关于正则表达式的好书,如Jeffrey E.F. Friedl's "Mastering Regular Expressions"。
它不仅会向您显示-
在字符类中创建一个字符范围 -
[a-z]
所以必须逃脱 -
[a\-z]
或放在开头 -
[-az]
或最后 -
[az-]
当逐字表示时,而且单独使用一个正则表达式解析这种标记(Chomsky术语中的无上下文语言)通常是错误的。
您正在寻找标记解析器(如BeautifulSoup或lxml,但在C#中),而RFC 3986, Appendix B则寻找正确的URI匹配表达式。