Python 學習之正則表達式

Python 自 1.5 版本起增加了re 模塊,它提供 Perl 風格的正則表達式模式。re 模塊使 Python 語言擁有全部的正則表達式功能。

入門

實例:找出字符串中的所有小寫字母。

import re

# 設定一個常量
a = '兩點水|twowater|liangdianshui|草根程序員|ReadingWithU'

# 選擇 a 裏面的所有小寫英文字母

re_findall = re.findall('[a-z]', a)

print(re_findall)

結果:

['t', 'w', 'o', 'w', 'a', 't', 'e', 'r', 'l', 'i', 'a', 'n', 'g', 'd', 'i', 'a', 'n', 's', 'h', 'u', 'i', 'e', 'a', 'd', 'i', 'n', 'g', 'i', 't', 'h']

字符集

字符集是由一對方括號 “[]” 括起來的字符集合。使用字符集,可以匹配多個字符中的一個。比如:[0-9a-fA-F] ,匹配單個的十六進制數字,且不分大小寫。注意了,字符和範圍定義的先後順序對匹配的結果是沒有任何影響的。

字符集一對方括號 “[]” 裏面的字符關係是"或(OR)"關係。

import re
a = 'uav,ubv,ucv,uwv,uzv,ucv,uov'

# 字符集

# 取 u 和 v 中間是 a 或 b 或 c 的字符
findall = re.findall('u[abc]v', a)
print(findall)
# 如果是連續的字母,數字可以使用 - 來代替
l = re.findall('u[a-c]v', a)
print(l)

# 取 u 和 v 中間不是 a 或 b 或 c 的字符
re_findall = re.findall('u[^abc]v', a)
print(re_findall)

結果:

['uav', 'ubv', 'ucv', 'ucv']
['uav', 'ubv', 'ucv', 'ucv']
['uwv', 'uzv', 'uov']

數量詞

數量詞的詞法是:{min,max} 。min 和 max 都是非負整數。如果逗號有而 max 被忽略了,則 max 沒有限制。如果逗號和 max 都被忽略了,則重複 min 次。
實例:匹配出字符串中 4 到 7 個字母的英文

import re

a = 'java*&39android##@@python'

# 數量詞

findall = re.findall('[a-z]{4,7}', a)
print(findall)

結果:

['java', 'android', 'python']

re.sub

我們很多時候需要替換字符串中的字符,這時候就可以用到 def sub(pattern, repl, string, count=0, flags=0) 函數了,re.sub 共有五個參數。其中三個必選參數:pattern, repl, string ; 兩個可選參數:count, flags .
參數意義:

  • pattern
    表示正則中的模式字符串
  • repl
    repl,就是replacement,被替換的字符串的意思
  • string
    即表示要被處理,要被替換的那個 string 字符串
  • count
    對於pattern中匹配到的結果,count可以控制對前幾個group進行替換
  • flags
    正則表達式修飾符

實例

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-

import re

a = 'Python*Android*Java-888'

# 把字符串中的 * 字符替換成 & 字符
sub1 = re.sub('\*', '&', a)
print(sub1)

# 把字符串中的第一個 * 字符替換成 & 字符
sub2 = re.sub('\*', '&', a, 1)
print(sub2)


# 把字符串中的 * 字符替換成 & 字符,把字符 - 換成 |

# 1、先定義一個函數
def convert(value):
    group = value.group()
    if (group == '*'):
        return '&'
    elif (group == '-'):
        return '|'


# 第二個參數,要替換的字符可以爲一個函數
sub3 = re.sub('[\*-]', convert, a)
print(sub3)

輸出的結果:

Python&Android&Java-888
Python&Android*Java-888
Python&Android&Java|888

最後,附送一些常用的正則表達式:
史上最全常用正則表達式大全

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章