Python新手学习正则表达式时碰到的一个问题
python 版本 3.6.5,代码如下:
import requests
import re
content = requests.get('http://book.douban.com/').text
pattern = re.compile('<li.?href="(.?)".?title="(.?)".*?', re.S)
results = re.findall(pattern, content)
print(results)
代码在 results = re.findall(pattern, content)这里卡住了,如果将
pattern = re.compile('<li.?href="(.?)".?title="(.?)".*?', re.S)
去掉一个()
pattern = re.compile('<li.?title="(.?)".*?', re.S)
就能正确的运行,请问我是哪里出错了?希望大家指教
Python新手学习正则表达式时碰到的一个问题
正则表达式(regex)是Python里处理字符串匹配的利器,但新手常被它的语法搞晕。最常见的问题就是搞不清元字符(比如 ., *, +, ?, [], ())的用法,或者不理解贪婪/非贪婪匹配的区别。
举个典型例子,你想从字符串里提取所有数字,新手可能会直接写 \d,但这样只能匹配单个数字。正确做法是用 \d+ 来匹配连续的数字:
import re
text = "我有3个苹果和15个橘子"
pattern = r'\d+'
result = re.findall(pattern, text)
print(result) # 输出: ['3', '15']
另一个常见坑点是特殊字符的转义。比如想匹配字面意义的点号.,得写成 \.,否则.在正则里代表任意字符。
text = "文件名为data.txt"
pattern = r'\.txt' # 匹配 .txt
result = re.search(pattern, text)
if result:
print("找到:", result.group()) # 输出: .txt
简单说,学正则的关键是多练,从简单模式开始,逐步复杂化。
写代码不能试着写啊…
1 解析网页直接上正则不太好,2requests 不加 head 容易被封
非要上正则的话,你把 findall 参数搞混错了…
建议再看文档: http://www.runoob.com/python/python-reg-expressions.html
还可以了解一下 Beautifulsoup 等等
了解下 xpath 不过正则还是得学的
html 用正则解析效率很低和出错率挺高的,用这个库吧: https://github.com/kennethreitz/requests-html,requests 的作者的另一库,非常好用
学正则的时候验证一下表达式
http://tool.oschina.net/regex
不想正则搞晕,直接用谷歌浏览器的 copy xpath 功能加上 xpath helper 插件吧
问题在于问号 “?” 问好表示非贪婪


