python正則組
⑴ python 正則匹配
用python正則表達式可以做到,因為點在正則表達式中可以代表任意字元(除回車換行符外)
正則表達式 (-?d+). 替換成 1 (1表示第一捕獲組的數據)
完整的Python程序如下
importre
s='-111•485503•剩餘部分'
regex=r'(-?d+).'
result=re.sub(regex,r"1 ",s)
print(result)
⑵ python 正則表達式 groups和group有什麼區別
group和groups是兩個不同的函數。
一般,m.group(N) 返回第N組括弧匹配的字元。
而m.group() == m.group(0) == 所有匹配的字元,與括弧無關,這個是API規定的。
m.groups() 返回所有括弧匹配的字元,以tuple格式。
m.groups() == (m.group(0), m.group(1), ...)
對你給的例子:
m = re.match("([abc])+", "abc")
你的+號在括弧外面。括弧最多匹配到一個字元,要麼是a, 要麼是c,這個python引擎匹配的是末尾的c。
而m.group() == m.group(0) 這個返回的是整個匹配的字元串"abc".
⑶ python 正則表達式
這個問題的確比較糾結首先明確一點
m.groups()==m.group(1)+m.group(2)+...+m.group(n)
要確定m.group(n)中的n到底是多少???
1.在你的匹配式中出現了幾次匹配成功的括弧,n就是幾
給你舉個例子m = re.match("([abc])+([abc])+", "abc"):
它出現了2次括弧,且這兩次括弧都能匹配,所以n=2。你可以print m.group(2)不會報錯,而 m = re.match("([abc])+", "abc"),print m.group(2)則會報錯
2.其次python的匹配引擎是從後面開始的
在給你舉個對比的例子:
例子1:m = re.match("([abc])+([abc])+([abc])+", "abc"):
如果你理解第一點,n=3,然後你可以print 一下 你會發現:
m.group(3)=『c』 ,m.group(2)='b',m.group(1)='a'
例子2:m = re.match("([abc])+([abc])+", "abc"):
m.group(1)=b,m.group(2)='c'
( python中說明了n在0-99間都是可以的,如果超出的話IndexErrorexception跳出)
如果你能看明白那麼應該groups的相應東西你理解的差不多了,接下來看你第二問
?表示匹配前面的表達式0個或一次,例子:go?匹配go為0或者1次
:呵呵 就是冒號的意思,所以你懂的,沒匹配到
寫那麼多,如果不明白,可以再問我哈 萬請採納
⑷ python|正則表達式
\1指的就是捕獲組1的內容,具體內容你可以搜索下(也叫後向引用),/i是忽略大小寫,g是搜索所有內容,\b是指單詞的開頭或結尾
整個連起來/\b([a-z]+) \1\b/ig就表示在字元串中搜索重復的單詞(以字母開頭),忽略大小小,所以匹配會得到3組內容,即Is is、of of和up up
⑸ python 正則表達式 (.*)
groups()返回所有捕獲組構成的tuple。你的正則表達式中有唯一一個捕獲組(.*?),而?在此處表示非貪婪匹配,即在整個正則表達式成立的前提下匹配盡可能少的字元,此處最少的情況是什麼也不匹配,整個正則表達式匹配Python中的Py,而捕獲組自然為空字元串。
⑹ Python正則表達式的幾種匹配用法
下面列出: 1.測試正則表達式是否匹配字元串的全部或部分regex=ur"" #正則表達式 if re.search(regex, subject): do_something()else: do_anotherthing() 2.測試正則表達式是否匹配整個字元串 regex=ur"/Z" #正則表達式末尾以/Z結束 if re.match(regex, subject): do_something()else: do_anotherthing() 3.創建一個匹配對象,然後通過該對象獲得匹配細節(Create an object with details about how the regex matches (part of) a string) regex=ur"" #正則表達式 match = re.search(regex, subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 4.獲取正則表達式所匹配的子串(Get the part of a string matched by the regex) regex=ur"" #正則表達式 match = re.search(regex, subject)if match: result = match.group()else: result ="" 5. 獲取捕獲組所匹配的子串(Get the part of a string matched by a capturing group) regex=ur"" #正則表達式 match = re.search(regex, subject)if match: result = match.group(1)else: result ="" 6. 獲取有名組所匹配的子串(Get the part of a string matched by a named group) regex=ur"" #正則表達式 match = re.search(regex, subject)if match:result = match.group"groupname")else:result = "" 7. 將字元串中所有匹配的子串放入數組中(Get an array of all regex matches in a string) result = re.findall(regex, subject) 8.遍歷所有匹配的子串(Iterate over all matches in a string) for match in re.finditer(r"<(.*?)/s*.*?//1>", subject) # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() 9.通過正則表達式字元串創建一個正則表達式對象(Create an object to use the same regex for many operations) reobj = re.compile(regex) 10.用法1的正則表達式對象版本(use regex object for if/else branch whether (part of) a string can be matched) reobj = re.compile(regex)if reobj.search(subject): do_something()else: do_anotherthing() 11.用法2的正則表達式對象版本(use regex object for if/else branch whether a string can be matched entirely) reobj = re.compile(r"/Z") #正則表達式末尾以/Z 結束 if reobj.match(subject): do_something()else: do_anotherthing() 12.創建一個正則表達式對象,然後通過該對象獲得匹配細節(Create an object with details about how the regex object matches (part of) a string) reobj = re.compile(regex) match = reobj.search(subject)if match: # match start: match.start() # match end (exclusive): atch.end() # matched text: match.group() do_something()else: do_anotherthing() 13.用正則表達式對象獲取匹配子串(Use regex object to get the part of a string matched by the regex) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group()else: result ="" 14.用正則表達式對象獲取捕獲組所匹配的子串(Use regex object to get the part of a string matched by a capturing group) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group(1)else: result ="" 15.用正則表達式對象獲取有名組所匹配的子串(Use regex object to get the part of a string matched by a named group) reobj = re.compile(regex) match = reobj.search(subject)if match: result = match.group("groupname")else: result ="" 16.用正則表達式對象獲取所有匹配子串並放入數組(Use regex object to get an array of all regex matches in a string) reobj = re.compile(regex) result = reobj.findall(subject) 17.通過正則表達式對象遍歷所有匹配子串(Use regex object to iterate over all matches in a string) reobj = re.compile(regex)for match in reobj.finditer(subject): # match start: match.start() # match end (exclusive): match.end() # matched text: match.group()字元串替換 1.替換所有匹配的子串 #用newstring替換subject中所有與正則表達式regex匹配的子串 result = re.sub(regex, newstring, subject) 2.替換所有匹配的子串(使用正則表達式對象) reobj = re.compile(regex) result = reobj.sub(newstring, subject) 字元串拆分 1.字元串拆分 result = re.split(regex, subject) 2.字元串拆分(使用正則表示式對象) reobj = re.compile(regex) result = reobj.split(subject)
⑺ python中正則問題
r'(.*) are (.*?) .*'
首先,這是一個字元串,前面的一個r表示字元串為非轉義的原始字元串,讓編譯器忽略反斜杠,也就是忽略轉義字元。但是這個字元串里沒有反斜杠,所以這個r可有可無。
(.*) 第一個匹配分組,.*代表匹配除換行符之外的所有字元
(.*?)第二個匹配分組,.*?後面多個問號,代表非貪婪模式,也就是說只匹配符合條件的最少字元
後面的一個.* 沒有括弧包圍,所以不是分組,匹配效果和第一個一樣,但是不計入匹配結果中。
matchObj.group() 等同於matchObj.group(0),表示匹配到的完整文本字元
matchObj.group(1) 得到第一組匹配結果,也就是(.*)匹配到的
matchObj.group(2) 得到第二組匹配結果,也就是(.*?)匹配到的
因為只有匹配結果中只有兩組,所以填3時會報錯。
⑻ 如何用python正則
(1)re.match()函數
re.match 嘗試從字元串的開始匹配一個模式。
函數語法:
re.match(pattern, string, flags=0)
函數參數說明:
參數
描述
pattern 匹配的正則表達式
string 要匹配的字元串。
flags 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
匹配成功re.match方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
匹配對象方法
描述
group(num=0) 匹配的整個表達式的字元串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
(2)re.research()函數
re.search匹配整個字元串,直到找到一個匹配。
函數語法:
re.search(pattern, string, flags=0)
函數參數說明:
參數
描述
pattern 匹配的正則表達式
string 要匹配的字元串。
flags 標志位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。
匹配成功re.search方法方法返回一個匹配的對象,否則返回None。
我們可以使用group(num) 或 groups() 匹配對象函數來獲取匹配表達式。
匹配對象方法
描述
group(num=0) 匹配的整個表達式的字元串,group() 可以一次輸入多個組號,在這種情況下它將返回一個包含那些組所對應值的元組。
groups() 返回一個包含所有小組字元串的元組,從 1 到 所含的小組號。
(3)實例
我這里採用re.search()函數解決的問題。
測試數據集為購物網站用戶評論
實例代碼:
[python]view plain
#-*-coding:utf-8-*-
importsys
importre
reload(sys)
text=open('JD_DFB_comments.txt')
line=text.readline()
#i=0
whileline:
#i=i+1
#re.search匹配整個字元串,直到找到一個匹配。
n1=re.search(r'(要(是|能)(.*)就(更|好|再|直觀|完美|太)(.*)了)',line)
n2=re.search(r'(如果)(.*)就(更|好|再|直觀|完美|太)(.*)了',line)
#打開將要寫入的數據
data=open('aa.txt','a')
ifn1:
#printline
data.write(line)#寫入匹配到的數據
#printi記錄匹配結果所在的行數
#printn1.group()#等於printline
printn1.group(3)#打出第三個括弧里的內容
ifn2:
#printn2.group()
printn2.group(2)
line=text.readline()
text.close()
閱讀更多
個人分類:Python語言
想對作者說點什麼?我來說一句
Python中re的match、search、findall、finditer區別
⑼ python正則表達式是什麼呢
python正則表達式如下:
在python中,所謂的「正則表達式」指的是通常被用來檢索、替換那些符合某個模式的一段文本。具體而言,它的作用是檢測某個字元串是否符合規則和提取網頁字元串中想要的數據。
正則表達式是對字元串提取的一套規則,我們把這個規則用正則裡面的特定語法表達出來,去匹配滿足這個規則的字元串。正則表達式具有通用型,不僅python裡面可以用,其他的語言也一樣適用。
python的編程特點:
速度快:Python的底層是用C語言寫的,很多標准庫和第三方庫也都是用C寫的,運行速度非常快。
免費、開源:Python是FLOSS(自由/開放源碼軟體)之一。使用者可以自由地發布這個軟體的拷貝、閱讀它的源代碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
高層語言:用Python語言編寫程序的時候無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
解釋性:一個用編譯性語言比如C或C++寫的程序可以從源文件(即C或C++語言)轉換到一個你的計算機使用的語言(二進制代碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。