|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 编程逸 于 2017-4-6 10:40 编辑
- html ="""
- <a href="123" target="_self">MMMM;<a href="560" target="_self"> 陈,<a href="573" target="_self">YYY,<a href="230" target="_self"> 张
- """
- regex = re.compile(r'href=".+?".{5,30}张')
- href = regex.findall(html)
- print(href)
复制代码
我只想要- href="230" target="_self"> 张
复制代码 就行了,但是匹配结果是- ['href="123" target="_self">MMMM;<a href="560" target="_self"> 陈,<a href="573" target="_self">YYY,<a href="230" target="_self"> 张']
复制代码
请问我怎样才能单独把- href="230" target="_self"> 张
复制代码 匹配出来
------------------------------------------------------------------------------------------------------------------------------
感谢gopythoner提供思路,正则需要先匹配href="230",把href="230"的规则用正则表达式写出来,而不能用.+?来匹配,任意符号代替是不行的,会匹配全部
- html ="""
- <a href="/publish/1-23_.html" target="_self">MMMM;<a href="/publish/5-60_.html" target="_self"> 陈,<a href="/publish/57-3_.html" target="_self">YYY,<a href="/publish/23-0_.html" target="_self"> 张
- """
- regex = re.compile(r'href="[\w/;?:@&=+$ ,-_.!~*\'()<>#%"]+?".{5,30}张')
- href = regex.findall(html)
- print(href)
复制代码
href="[\w/;?:@&=+$ ,-_ . !~*\'()<>#%\"]"是匹配网址,网址貌似会出现的符号就这么多吧,其中'和"可能需要转移符号\来消除特殊意义
------------------------------------------------------------------------------------------------------------------------------
我发现其实并不是匹配href="230",而是不要匹配相似语句中的分隔符号,上面为什么匹配- <a href="/publish/23-0_.html" target="_self"> 张
复制代码 很容易,但是匹配- <a href="/publish/5-60_.html" target="_self"> 陈
复制代码 又会把前面的全部匹配出来,因为“陈”这个语句前面的分隔符是英文的分号,在匹配网址的范围内所以会被匹配,而“张”的语句前面分隔是逗号,这个中文的逗号不URL的范围内,而中文的逗号属于任意符号[.]的范围所以一开始会匹配到全部内容
所以匹配不需要那么麻烦了,直接把正则表达式改为:- regex = re.compile(r'href="[^;]+?".{5,30}陈')
复制代码 即可把陈分隔出来
本帖最后由 gopythoner 于 2017-4-5 17:44 编辑
- regex = re.compile(r'(href="\d*".{5,30}张)')
复制代码
改成这样就行了
这个正则的最重要的地方在于href="数字"
就是这个数字,这个里面一定要先定为数字,才会只匹配最后一段,不然就是全部了
|
|