1. 程式人生 > >['hello', 'sb']正則表達式

['hello', 'sb']正則表達式

strong -a program 如果 例如 ces pycharm port 符號

課堂
# 取數字和普通字符
import re
# ret=re.findall("\w+","yuan123$888^%")
# print(ret)
# # [‘yuan123‘, ‘888‘]

# #取i
# ret=re.findall(r"i\b","wo i ni")
# print(ret)
# # [‘i‘, ‘i‘]

# #鬧不清
# ret=re.findall(r"bc\\l","abc\le")
# print(ret)

# ret=re.search(r‘-blog-aticles-(?P<year>20[01]\d)-(?P<month>\d+)‘,‘-blog-aticles-2005-12‘)


# print(ret.group(‘year‘))
# print(ret.group(‘month‘))
# 2005


# ^:匹配字符串的開始位置
# ret=re.findall(‘^李.‘,‘李連傑,李傑,李剛,張學友,郭富城‘)
# print(ret)
# [‘李連‘]


# $匹配字符串的末尾位置
# ret=re.findall(‘..n$‘,‘yabn傑,剛,王超,李連傑yuan‘)
# print(ret)
# [‘yuan‘]


# .:除換行符以外的任意一個符號
# ret=re.findall(‘李.‘,‘李連傑,李傑,王超,郭富城‘)
# print(ret)
# [‘李連‘, ‘李傑‘]


# \d{}每個數字取幾位數
# ret=re.findall(‘\d{2}‘,‘12,123,1234,12345‘)
# print(ret)
# [‘12‘, ‘12‘, ‘12‘, ‘34‘, ‘12‘, ‘34‘]


# *:(0到無窮)包括131
# ret=re.findall(‘131\d*‘,‘131245,253617,131,13122344452,123456‘)
# print(ret)


# \d+:1到無窮以下不包括131
# ret=re.findall(‘131\d+‘,‘13111332241,123,131,456,1234,131246‘)
# print(ret)
# [‘13111332241‘, ‘131246‘]


# -?\d:一位一位取值
# ret=re.findall(‘-?\d‘,‘131,41,-11,12,-4‘)
# print(ret)
# [‘1‘, ‘3‘, ‘1‘, ‘4‘, ‘1‘, ‘-1‘, ‘1‘, ‘1‘, ‘2‘, ‘-4‘]

補充
正則表達式的元字符有. ^ $ * ? { [ ] | ( )
.表示任意字符
[]用來匹配一個指定的字符類別,所謂的字符類別就是你想匹配的一個字符集,對於字符集中的字符可以理解成或的關系。
^ 如果放在字符串的開頭,則表示取非的意思。[^5]表示除了5之外的其他字符。而如果^不在字符串的開頭,則表示它本身。

具有重復功能的元字符:
* 對於前一個字符重復0到無窮次
對於前一個字符重復1到無窮次
?對於前一個字符重復0到1次
{m,n} 對於前一個字符重復次數在為m到n次,其中,{0,} = *,{1,} = , {0,1} = ?
{m} 對於前一個字符重復m次
正則表達式(可以稱為REs,regex,regex pattens)是一個小巧的,高度專業化的編程語言,它內嵌於python開發語言中,可通過re模塊使用。正則表達式的

pattern可以被編譯成一系列的字節碼,然後用C編寫的引擎執行。下面簡單介紹下正則表達式的語法

正則表達式包含一個元字符(metacharacter)的列表,列表值如下: . ^ $ * + ? { [ ] \ | ( )

  1.元字符([ ]),它用來指定一個character class。所謂character classes就是你想要匹配的字符(character)的集合.字符(character)可以單個的列出,也可以通過"-"來分隔兩個字符來表示一 個範圍。例如,[abc]匹配a,b或者c當中任意一個字符,[abc]也可以用字符區間來表示---[a-c].如果想要匹配單個大寫字母,你可以用 [A-Z]。 元字符(metacharacters)在character class裏面不起作用,如[akm$]將匹配"a","k","m","$"中的任意一個字符。在這裏元字符(metacharacter)"$"就是一個普通字符。 2.元字符[^]. 你可以用補集來匹配不在區間範圍內的字符。其做法是把"^"作為類別的首個字符;其它地方的"^"只會簡單匹配 "^"字符本身。例如,[^5] 將匹配除 "5" 之外的任意字符。同時,在[ ]外,元字符^表示匹配字符串的開始,如"^ab+"表示以ab開頭的字符串。 import re
s="<div>yuan<img></div><a href=""></div"
ret=re.findall("<div>.*?</div>",s)
print(ret)

# ret="hello,sb".split(‘,‘)
# print(ret)
[‘hello‘, ‘sb‘
]

# 切數字
# ret=‘hello23nnn23jjjj4‘
# s=re.split(‘\d+‘,ret,)
# print(s)
[‘hello‘, ‘nnn‘, ‘jjjj‘, ‘‘]
代替

# ret=‘hello world‘.replace(‘world‘,‘sb‘)
# print(ret)
多個代替
ret=re.sub(‘w.{2,3}d‘,‘cnm‘,‘hello world waad‘,2)
# print(ret)
# hello cnm cnm

# ret=re.subn(‘w.{2,3}d‘,"sb",‘hello world waad‘)
# print(ret)

(‘hello sb sb‘, 2)

# s=‘hello 123 world 456‘

# ret=re.sub(‘\d+‘,‘222‘,s)
# print(ret)
# hello 222 world 222
    re.finditer() 返回一個叠代器
# ret=re.finditer(‘\d+‘,‘ajdgfua234sgfakfb456akfnfnk567‘)
# print(ret)
# print(next(ret).group())
# print(next(ret).group())
# print(next(ret))
# <callable_iterator object at 0x000002CC3A98E240>
# 234
# 456
# <_sre.SRE_Match object; span=(27, 30), match=‘567‘>

調用系統命令
import subprocess
# s=subprocess.Popen(‘dir‘,shell=True,stdout=subprocess.PIPE)
# print(s.stdout.read().decode(‘gbk‘))
# C:\Users\DELL\AppData\Local\Programs\Python\Python36\python.exe C:/Users/DELL/PycharmProjects/模塊/爬蟲.py
# 驅動器 C 中的卷是 OS
# 卷的序列號是 5823-575E
#
# C:\Users\DELL\PycharmProjects\模塊 的目錄
#
# 2017/06/27 15:23 <DIR> .
# 2017/06/27 15:23 <DIR> ..
# 2017/06/25 20:27 10 a.txt
# 2017/06/25 17:51 0 b.txt
 
 
 

['hello', 'sb']正則表達式