您好,登錄后才能下訂單哦!
本篇內容介紹了“python正則表達式的技巧有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
格式:
量詞?
注:量詞有{n,m}、?、+、*
用處:
在字符串中查找符合正則表達式規則的最短子字符串。
案例:
現有字符串num = ”10-3*(20-10+(-10/5)27/3/3-(-100)/(10-35))",要提取括號中的內容。
import re num = '10-3*(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))+(-5*-6)'num2 = re.findall('\(.+?\)', num)num3 = re.findall('\(.+\)', num)print(num2)print(num3)out:['(20-10+(-10/5)', '(-100)', '(10-3*5)']['(20-10+(-10/5)*27/3/3-(-100)/(10-3*5))']
上述代碼中num2使用了最小匹配,而num3使用了默認的最大匹配。
請注意num2的正則表達式:
.表示匹配除了換行符之外的所有字符
+表示一個或多個
?表示最小匹配,匹配后面第一個)即返回結果。若沒有這個?會匹配到最后一個)才返回結果。
格式:
(\w)
注:在正則表達式中一對括號包圍的內容表示分組,正則表達式中可以有多個分組
用處:
匹配字符串,只提取分組中的內容,非分組的內容舍棄不提取。
案例:
str1 = ''' <a>python<a> <b>java<b> <c>javascript<c> '''result1 = re.findall('<\w+>(\w+)<\w+>',str1)print(result1)result2 = re.findall('<(\w+)>\w+<\w+>',str1)print(result2)out:['python', 'java', 'javascript']['a', 'b', 'c']
從result1和result2提取內容的不同可以看到分組的妙用,分組能指定提取符合正則表達式某一段的內容。
格式:
(?:正則表達式)
注:在括號內以?:開頭的分組,匹配到的內容會被隱藏。
另:分組隱藏和分組命名不能同時使用。
用處:
當有用數據和無用數據混在一起時,只能先全取出來,然后對無用數據做分組隱藏,把有用的數據對應的正則表達式用()包起來,這樣即可提取出有用數據。
案例:
result1 = re.findall('1(\d)(\d)','167189')print(result1)result2 = re.findall('1(?:\d)(\d)','167189')print(result2)out:[('6', '7'), ('8', '9')]['7', '9']
格式:
(?P<名字>正則表達式)
注:?P<名稱>,英文書名號內是分組的名稱。
用處:
分組命名在有很多段分組時對不同的分組命名,便于使用,防止混淆。
案例:
str1 = '<tag>study python every day</tag>'ret = re.search('<(?P<tag>\w+)>(?P<name>.*?)</(?P=tag)>',str1)print(ret)print(ret.group('tag'))print(ret.group('name'))out:tag study python every day
上述案例是一個簡單的示范,只有2個分組。但實際爬蟲的時候經常會遇到多達10個以上的分組。在分組數量多的時候很容易混淆數據,若使用分組命名會非常方便,根據名字讀取對應的數據,提高了代碼可讀性。
“python正則表達式的技巧有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。