# Python中怎么利用正則抓取數據
正則表達式(Regular Expression)是處理字符串的強大工具,Python通過內置的`re`模塊提供了完整的正則支持。本文將詳細介紹如何利用Python正則表達式高效抓取結構化數據。
## 一、正則表達式基礎
### 1. 基本元字符
- `.` 匹配任意字符(除換行符)
- `\d` 匹配數字 → 等價于[0-9]
- `\w` 匹配字母數字下劃線 → 等價于[A-Za-z0-9_]
- `\s` 匹配空白字符(空格、制表符等)
- `^` 匹配字符串開頭
- `$` 匹配字符串結尾
### 2. 量詞符號
- `*` 0次或多次
- `+` 1次或多次
- `?` 0次或1次
- `{n}` 精確n次
- `{n,}` 至少n次
- `{n,m}` n到m次
## 二、Python re模塊核心方法
### 1. re.match()
從字符串起始位置匹配模式:
```python
import re
result = re.match(r'\d+', '123abc')
if result:
print(result.group()) # 輸出: 123
掃描整個字符串返回第一個匹配:
result = re.search(r'\d+', 'abc123def')
print(result.group()) # 輸出: 123
返回所有匹配結果的列表:
results = re.findall(r'\d+', 'a1b22c333')
print(results) # 輸出: ['1', '22', '333']
返回匹配結果的迭代器(適合大文本):
for match in re.finditer(r'\d+', 'a1b22c333'):
print(match.group(), match.span())
import re
html = '<a href="https://example.com">Link1</a><a href="/about">Link2</a>'
pattern = r'href=["\'](https?://[^"\']+|/[^"\']*)["\']'
urls = re.findall(pattern, html)
print(urls) # 輸出: ['https://example.com', '/about']
text = "聯系郵箱:service@domain.com,備用郵箱:backup@domain.org"
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
print(emails) # 輸出: ['service@domain.com', 'backup@domain.org']
text = "商品A價格¥299.00,商品B特價$45.99"
prices = re.findall(r'[¥$]\d+\.?\d*', text)
print(prices) # 輸出: ['¥299.00', '$45.99']
默認量詞是貪婪模式,添加?
轉為非貪婪:
html = '<div>內容1</div><div>內容2</div>'
re.findall(r'<div>(.*?)</div>', html) # 輸出: ['內容1', '內容2']
使用()
提取特定部分:
log = "[2023-08-01] ERROR: File not found"
match = re.search(r'\[(.*?)\] (ERROR|WARN): (.*)', log)
print(match.groups()) # 輸出: ('2023-08-01', 'ERROR', 'File not found')
重復使用時應預編譯:
pattern = re.compile(r'\d{4}-\d{2}-\d{2}')
dates = pattern.findall('日期:2023-08-01,2023-08-02')
使用re.DOTALL
或re.S
標志:
text = """<div>
多行內容
</div>"""
re.findall(r'<div>(.*)</div>', text, re.DOTALL)
使用re.IGNORECASE
或re.I
:
re.findall(r'python', 'Python PYTHON', re.I) # 輸出: ['Python', 'PYTHON']
使用\u
或re.UNICODE
:
re.findall(r'[\u4e00-\u9fa5]+', '中文English混合') # 輸出: ['中文']
.
(如\d
代替[0-9]
)(.*)*
re.finditer()
處理大文本注意:對于復雜HTML解析,建議結合BeautifulSoup等專業庫使用,正則更適合處理有固定模式的文本數據。
通過掌握這些技巧,你可以高效地從各種文本數據中提取所需信息。正則表達式需要實踐積累,建議保存常用模式片段作為自己的”正則庫”。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。