投稿005期|5分鐘學會正則,解決98%爬蟲需要做字串提取的工作
介紹幾種非常常用的特殊字元,解決98%爬蟲需要做字串提取的工作。
正規表示式最常見的字元-
1)特殊字元:就是一些有特殊含義的字元。 $ () * + . [ ? ^ { |
-
2)限定符:用來指定正規表示式的一個給定元件必須要出現多少次才能滿足匹配。* + ? {n} {n,} {n,m}
-
3)定位符:用來描述字串或單詞的邊界。^ $
- 4)其他字元:w W s S d
> 直接進入python示例
1、介紹^ . * $的用法- 1)^ 匹配輸入字串開始的位置。
- 2)字元. 匹配除換行符 n 之外的任何單字元。
- 3)字元* 匹配前面的子表示式零次或多次。
- 4)字元 $ 匹配輸入字串的結尾位置。
# -*- coding:utf-8 -*-
'''
by yizhiamumu
20171101
'''
import re
'''1介紹^ . * $的用法
^ 匹配輸入字串開始的位置。
. 匹配除換行符 n 之外的任何單字元。
* 匹配前面的子表示式零次或多次。
$ 匹配輸入字串的結尾位置。
'''
#需要匹配的字串
line = "hello world"
#1.列印 以h 開頭的文字
regex_str = '^h'
if re.match(regex_str, line):
print "1, 列印以h 開頭的文字"
#2.列印 以h 開頭,後面跟著一個字串
regex_str = '^h.'
if re.match(regex_str, line):
print "2, 列印以h 開頭,後面跟著一個字串"
#3.列印以h 開頭,跟任意數量字串
regex_str = '^h*'
if re.match(regex_str, line):
print "3列印以h 開頭,後面任意數量的字串"
#4以d 結尾
regex_str = '.*d$'
if re.match(regex_str, line):
print "4 匹配以d 結尾的字串"
#5 以h 開頭,以d 結尾,中間只有任意一個字串
regex_str = '^h.d$'
if re.match(regex_str, line):
print "5 以h 開頭, 以d 結尾,中間只有任意一個字串"
#6 以h 開頭, 以d 結尾,中間任意字串
regex_str = '^h.*d$'
if re.match(regex_str, line):
print "6 h開頭,以d 結尾,中間任意一個字串"
列印日誌:
2、介紹() ?用法- ()標記一個子表示式的開始和結束位置。
- ?匹配前面的子表示式零次或一次,或指明一個非貪婪限定符。
'''2介紹() ?用法
()標記一個子表示式的開始和結束位置。
?匹配前面的子表示式零次或一次,或指明一個非貪婪限定符。
'''
line = "hellohailhelloworld"
#獲取hail
regex_str = '.*(h.*h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "獲取hail,列印結果為hailh"
print match_obj.group(1)
#使用非貪婪限定符,強制從左開始匹配
regex_str = '.*?(h.*h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用非貪婪限定符,強制從左開始匹配"
print match_obj.group(1)
#使用非貪婪限定符,強制從左開始匹配,遇到第一個h 就停止匹配
regex_str = '.*?(h.*?h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用非貪婪限定符,強制從左開始匹配,遇到第一個h 就停止匹配"
print match_obj.group(1)
列印日誌:
3、介紹+ {n} {n,} {n,m}用法- 1)+匹配前面的子表示式一次或多次。
例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
- 2){n} n 是一個非負整數。匹配確定的 n 次。
例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
- 3){n,} n 是一個非負整數。至少匹配n 次。
例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。
- 4){n,m} m 和 n 均為非負整數,其中n
例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。
'''
3、介紹+ {n} {n,} {n,m}用法
1)+匹配前面的子表示式一次或多次。
例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
2){n} n 是一個非負整數。匹配確定的 n 次。
例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
3){n,} n 是一個非負整數。至少匹配n 次。
例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。'o{1,}' 等價於 'o+'。'o{0,}' 則等價於 'o*'。
4){n,m} m 和 n 均為非負整數,其中n <= m。最少匹配 n 次且最多匹配 m 次。
例如,"o{1,3}" 將匹配 "fooooood" 中的前三個 o。'o{0,1}' 等價於 'o?'。請注意在逗號和兩個數之間不能有空格。
'''
line = "hellohailhihello world"
#獲取h 和 h 之間包含特定數量字元的子字串
#使用+, h和h 之間至少要有一個字元
regex_str = '.*(h.+h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用+,獲取h 和 h 之間包含特定數量字元的子字串,h 和 h 之間至少有一個字元"
print match_obj.group(1)
#使用{1}, h和h 之間至少有一個字元
regex_str = '.*(h.{1}h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用{1}, h和h 之間至少有一個字元"
print match_obj.group(1)
#使用{2,} ,h 和 h 之間至少有兩個字元
regex_str = '.*(h.{2,}h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用{2,} ,h 和 h 之間至少有兩個字元"
print match_obj.group(1)
# 使用{3,5} , h 和 h 之間的字元限定在3-5個
regex_str = '.*(h.{3,5}h).*'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用{3,5} , h 和 h 之間的字元限定在3-5個"
print match_obj.group(1)
列印日誌:
4、介紹|[123] [0-9] [^1]用法- 1)|指明兩項之間的一個選擇。
- 2)[123] 只要是123中的其中一個即可。
- 3)[0-9] 只要是0-9中的任意數字即可。
- 4)[^1] 非,只要不是1即可。
'''
4、介紹|[123] [0-9] [^1]用法
1)|指明兩項之間的一個選擇。
2)[123] 只要是123中的其中一個即可。
3)[0-9] 只要是0-9中的任意數字即可。
4)[^1] 非,只要不是1即可。
'''
line = "hello world"
# 匹配hello world
regex_str = '(hello world|hi world)'
match_obj = re.match(regex_str, line)
if match_obj:
print "123"
print match_obj.group(1)
# 使用[] 匹配手機號, 1之後只要是3578 中的一個即可,後面0-9 中的數字出現9次
line = '18662342234'
regex_str = '1[3578][0-9]{9}'
match_obj = re.match(regex_str, line)
if match_obj:
print "正確的手機號"
# 使用[]匹配手機號, 1之後只要是3578 中的一個即可,後面數字不能為1
regex_str = '1[3578][^1]{9}'
match_obj = re.match(regex_str, line)
if match_obj:
print "使用[]匹配手機號, 1之後只要是3578 中的一個即可,後面數字不能為1"
列印日誌:
5、介紹s S w W d用法- 1)s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ fnrtv]。
- 2)S匹配任何非空白字元。等價於 [^ fnrtv]。
- 3)w 等價於[A-Za-z0-9_]。
- 4)W 與w相反。
- 5)d 所有數字,等價於[0-9]。
'''
5、介紹s S w W d用法
1)s匹配任何空白字元,包括空格、製表符、換頁符等等。等價於 [ fnrtv]。
2)S匹配任何非空白字元。等價於 [^ fnrtv]。
3)w 等價於[A-Za-z0-9_]。
4)W 與w相反。
5)d 所有數字,等價於[0-9]。
'''
line = 'hello world'
regex_str = '(hellosworld)'
match_obj = re.match(regex_str, line)
if match_obj:
print "hello world 之間有空格"
regex_str2 = '(helloSworld)'
match_obj = re.match(regex_str2, line)
if match_obj:
print "不是空格"
regex_str3 = '(hellowworld)'
match_obj = re.match(regex_str3, line)
if match_obj:
print "hello world 之間有[A-Za-z0-9_]其中的字元"
regex_str4 = '(helloWworld)'
match_obj = re.match(regex_str4, line)
if match_obj:
print "hello world 之間不是[A-Za-z0-9_]其中的字元"
line = 'hello world 007'
regex_str5 = '.*?(d+)'
match_obj = re.match(regex_str5, line)
if match_obj:
print "列印其中數字"
print match_obj.group(1)
列印日誌:
over
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2318/viewspace-2804008/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 寫爬蟲,不會正則怎麼行?爬蟲
- PHP 正則提取字串中的美元PHP字串
- 如何讓爬蟲正確提取偽元素爬蟲
- 【Python爬蟲】正則爬取趕集網Python爬蟲
- [Python] 網路爬蟲與資訊提取(1) 網路爬蟲之規則Python爬蟲
- 爬蟲工作原理詳解:從網頁請求到資料提取爬蟲網頁
- Golang爬蟲,Go&&正則爬取資料,槓桿的Golang爬蟲
- Jmeter系列(27)- 詳解正則提取器JMeter
- 爬蟲ip代理池搭建前需解決的問題及搭建思路爬蟲
- Python 爬蟲十六式 - 第七式:正則的藝術Python爬蟲
- Python爬蟲教程-19-資料提取-正規表示式(re)Python爬蟲
- 使用正則編寫簡單的爬蟲爬取某網站的圖片爬蟲網站
- python爬蟲中使用正則match( )方法匹配目標Python爬蟲
- 【Python學習】爬蟲爬蟲爬蟲爬蟲~Python爬蟲
- python爬蟲 正規表示式詳解Python爬蟲
- 用正則提取域名網址
- 基本的爬蟲工作原理爬蟲
- 央行徵信爬蟲解決方案爬蟲
- 爬蟲受限的三種解決方案爬蟲
- JavaScript正則爬坑JavaScript
- Python【爬蟲實戰】提取資料Python爬蟲
- 網頁提取資料常用正則網頁
- 近期的爬蟲工作雜談爬蟲
- Python網路爬蟲(正則, 內涵段子,貓眼電影, 鏈家爬取)Python爬蟲
- 正則匹配指定字元之前的字串字元字串
- Python爬蟲工作好做嗎?爬蟲工作發展前景如何呢?Python爬蟲
- python爬蟲總是爬不到資料,你需要解決反爬蟲了Python爬蟲
- 詳解爬蟲與RPA的工作原理和差異爬蟲
- 爬蟲IP受限的三個解決方法爬蟲
- 什麼是爬蟲?爬蟲的工作原理是什麼呢爬蟲
- 什麼是爬蟲?Python爬蟲的工作流程怎樣?爬蟲Python
- 爬蟲入門(字串相關)爬蟲字串
- JavaScript析構+正則的字串解析方法JavaScript字串
- Java 的正規表示式與爬蟲Java爬蟲
- 常見網站反爬蟲的解決措施網站爬蟲
- 爬蟲學到什麼程度可以去找工作爬蟲
- Golang爬蟲+正規表示式Golang爬蟲
- 反網路爬蟲以及解決方案爬蟲