1
keakon 2013-04-02 10:03:05 +08:00 via iPhone
你想丢弃 h3 的话,直接 .*? 就行了。
或者保险点,[^<]*。 |
2
gastlygem 2013-04-02 11:04:14 +08:00
关于问题2,match是全字符串匹配,如果你想要匹配部分字符串,你需要用 m = p.search('<xml')
|
3
young 2013-04-02 11:09:45 +08:00
1楼正解 关键在于那个?号 呵呵
|
4
doskoi 2013-04-02 11:16:35 +08:00
我记得看过一篇不要用正则去解析html, 所以用XPath把
|
6
yangg 2013-04-02 12:20:51 +08:00
1. </div>(.*)</div>[\s\S]*?<p>(.*)</p>
2. 第二个换search方法就行了,match是从开始匹配, re.match(pattern, string, flags=0) If zero or more characters at the beginning of string match the regular expression pattern, return a corresponding MatchObject instance. http://docs.python.org/release/2.7.3/library/re.html?highlight=re.match#re.match ps:解析html可以用BeautifulSoup |
8
hidden 2013-04-02 14:18:28 +08:00
@ivanlw <p>.*?</p> 后面那个问号表示非贪婪模式,遇到第一个</p>就停,不然会继续找后面的</p>
http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F |
9
halfelf 2013-04-02 14:48:42 +08:00
不要用正则解析html/xml等,正则无法完整无误的解析,况且有各种各样的xpath轮子,还用自己写
http://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not |
13
ivanlw OP |
14
ivanlw OP @yangg 哦,sorry,测试出来了……这个可以的……
想知道下中间部分如果用[.\n]*?为什么不可以…… 我看的教程是.表示除了\n以外的所有字符,然后[]表示的是中间出现的情况都可以,所以觉得[.\n]应该是包含所有的情况了…… |
16
yangg 2013-04-03 11:11:51 +08:00
@ivanlw [.\n]不行,是因为.在[]里不转义就表示 字符".",而不是any character except newline,
所以[.\n]只是两个字符 http://rubular.com/r/BT2pdwyprG python里可以开启DOTALL模式 (?s)<div>(.*?)</div>.*?<p>(.*?)</p> |