python的findall
⑴ python正則表達式re.findall(r"\b\w+\b", s)中的r是什麼意思
Python中字元串前面加上
r
表示原生字元串,
與大多數編程語言相同,正則表達式里使用"\"作為轉義字元,這就可能造成反斜杠困擾。假如你需要匹配文本中的字元"\",那麼使用編程語言表示的正則表達式里將需要4個反斜杠"\\\\":前兩個和後兩個分別用於在編程語言里轉義成反斜杠,轉換成兩個反斜杠後再在正則表達式里轉義成一個反斜杠。Python里的原生字元串很好地解決了這個問題,這個例子中的正則表達式可以使用r"\\"表示。同樣,匹配一個數字的"\\d"可以寫成r"\d"。有了原生字元串,你再也不用擔心是不是漏寫了反斜杠,寫出來的表達式也更直觀。
⑵ 小白求助大神python中findall()和sub()的結果
第一個問題,你搞錯了,不是逗號,是兩個空字元串,返回的結果列比里其實有三個元素。雖然看起來很像兩個。所以,它找到了符合條件的三個對象,也就是['section{First', '', ''] 。右大括弧的位置是理解的關鍵。
第二個問題。sub方法是用你指定的字元串替換『匹配』上的字元串。前面我們匹配上了3個位置,將它們逐一替換,就得到了'subsection{}subsection{}}subsection{}'。注意其中那個蹦單的右大括弧。
第三個問題。你使用了sub的分組引用功能。它在替換的同時會用匹配上的內容替換『1』。你在前面匹配上了一個字元串和兩個空格,將它們依次代入問題二結果中的三對大括弧就能得到最終結果'subsection{section{First}subsection{}}subsection{}'
更多內容參考正則表達式和re模塊
⑶ python的findall函數調用總是出錯,請教要怎麼解決
我一般都是用math或者seach的,你可以試試。
re.match
re.match 嘗試從字元串的開始匹配一個模式,如:下面的例子匹配第一個單詞。
import retext ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.match(r"(\w+)\s", text)
if m:
print m.group(0), '\n', m.group(1)
else:
print'not match're.match的函數原型為:re.match(pattern, string, flags)第一個參數是正則表達式,這里為"(\w+)\s",如果匹配成功,則返回一個Match,否則返回一個None;第二個參數表示要匹配的字元串;第三個參數是標致位,用於控制正則表達式的匹配方式,如:是否區分大小寫,多行匹配等等。re.searchre.search函數會在字元串內查找模式匹配,只到找到第一個匹配然後返回,如果字元串沒有匹配,則返回None。import re
text ="JGood is a handsome boy, he is cool, clever, and so on..."
m = re.search(r'\shan(ds)ome\s', text)
if m:
print m.group(0), m.group(1)
else:
print'not search're.search的函數原型為: re.search(pattern, string, flags)每個參數的含意與re.match一樣。 re.match與re.search的區別:re.match只匹配字元串的開始,如果字元串開始不符合正則表達式,則匹配失敗,函數返回None;而re.search匹配整個字元串,直到找到一個匹配。
⑷ python 34:正則表達式的search()方法和findall()方法得到的值
search()方法得到的值,其類型是re.Match對象。
findall()方法得到的值,其類型是list。
search()方法得到的值,其類型是對象re.Match。這個對象有自己的方法。
其中最常用的兩個方法是group()和groups()。
group()方法的參數為一個非負整數。
group(0)是匹配字元串,group(1)為其第一個分組,group(2)為第二個分組,余類推。如果沒有相應的分組,則拋出異常。
groups()可以有參數,也可以沒有參數,其值與參數無關,所以就用無參數的形式。它的值為一個元組,其元素為所有分組。注意groups()的元素中不一定有匹配字元串,它只是所有分組。可以將整個正則表達式作為一個分組(在最外面加圓括弧),這樣其第一個元素就是匹配字元串。
findall()得到的值是一個列表。
這個列表的元素都是元組,每一個元組對應一個匹配,是這個匹配的所有分組。每一個元組與search()得到的值的groups()方法的值的性質一樣。同樣,元組中的元素不一定有匹配字元串,它們只是所有分組。可以將整個正則表達式作為一個分組(在最外面加圓括弧),這樣其第一個元素就是匹配字元串。
⑸ 說說在 Python 中,如何找出所有字元串匹配
Regex 對象有一個 findall() 方法,它會返回包含所查找字元串的所有匹配。這與 search() 方法明顯不同,search() 將返回一個 Match 對象,其中包含被查找字元串中的 「 第一次 」 匹配文本。請看以下示例,注意區分:
運行結果:
如果調用 findall 的正則表達式不存在分組(比如上例),那麼方法 findall() 將返回一個匹配字元串的列表,例如上例的 ['0591-83822032', '0591-83822033']。
如果調用 findall 的正則表達式存在分組,那麼方法 findall() 將返回一個字元串元組的列表(每個分組對應一個字元串),請看下例:
運行結果:
⑹ Python中的re.findall('(\d)\\1+','33acad122')怎麼理解,求詳
import re
kk = re.compile(r'd+')
kk.findall('one1two2three3four4')
#[1,2,3,4]
#注意此處findall()的用法,可傳兩個參數;
kk = re.compile(r'd+')
re.findall(kk,"one123")
#[1,2,3]
2. 正則表達式可能遇到的坑 --- 正則表達式中有括弧()
1. 正則表達式中當沒有括弧時,就是正常匹配,在本例中"/w+/s+/w+"第一次匹配到的字元為"2345 3456",由於是貪婪模式會 繼續匹配,第二次從"4567"開始匹配匹配到的結果為字元串"4567 5678"
⑺ python 正則表達式findall匹配問題
python的正則中用()會進行匹配,所以返回結果是['',''],就是兩個()中的匹配。要想達到原來的匹配效果,就是把4匹配出來,有兩種解決方法:
1.最外層加個大括弧,變成:m = re.findall('(([0-9])*4([0-9])*)',
'[4]'),返回結果的第一個元素就是匹配結果了。
2.去除()的匹配結果返回,在括弧前面加入?:,變成m =
re.findall('(?:\d)*4(?:\d)*', '[4]'),返回結果就是要匹配的結果了。
⑻ python中findall
這個是Python re正則模塊
就是按照p規則匹配html的文本內容。
p的規則具體是什麼意思,你要去學習Python 正則語法。