7.1 首先導(dǎo)入re模塊,import re,然后利用re.compile()方法創(chuàng)建Regex對象
7.2 在創(chuàng)建Regex對象時,正則表達(dá)式中有很多字符串表達(dá)的并不是表面上的含義,如'\d',在正則表達(dá)式中代表的是一個任意的數(shù)字。為了表達(dá)其表面上的含義,必須在前面加上''來進(jìn)行轉(zhuǎn)譯。但是,通過在字符串的第一個引號之前加上r,可以將該字符串標(biāo)記為原始字符串,它不包括轉(zhuǎn)義字符。
7.3 Regex.search()方法返回的是Match對象
7.4 對Match對象采用Match.group()方法來得到匹配的字符串。group()方法中Match.group()和Match.group(0)都表示第一個匹配的完整的字符串。
7.5 group(0)表示第一個匹配的完整的字符串,group(1)表示匹配(\d\d\d)的字符串,group(2)表示匹配(\d\d\d\d)的字符串。
7.6 利用轉(zhuǎn)譯符,()和.來表示圓括號和句號。
7.7 正則表達(dá)式中采用了用圓括號分組,那么findall()方法就會返回由元組構(gòu)成的列表,且只返回圓括號內(nèi)分組的部分;否則,將返回由字符串構(gòu)成的列表。
7.8 |是管道符,代表’或‘的意思。
7.9 ?一,表示其前面的分組匹配0或1次;二,表示非貪心模式。
7.10 ’+‘表示至少匹配一次;’*‘表示可以不匹配,也可以匹配多次。
7.11 {3}表示匹配3次,{3, 5}表示最少匹配3次,最多匹配5次,且此處是貪心模式,盡量匹配更多的次數(shù)。
7.12 \d表示0-9的任一數(shù)字,\w表示任一字母,\s表示一個空格。
7.13 \D表示0-9以外的任一字符,\W表示除字母外的任一字符,\S表示除空格外的任一字符。
7.14 向re.compile()傳入re.IGNORECASE或re.I作為第二個參數(shù),讓匹配不區(qū)分大小寫。
7.15 句號匹配的是任一除換行符之外的字符。向re.compile()傳入re.DOTALL后意味著句號可以匹配任一字符,包括換行符。
7.16 .*可以匹配任意字符,.*?是其貪心模式。
7.17 [a-z0-9]
7.18 X drummers, X pipers, five rings, X hens
7.19 re.VERBOSE作為re.compile()方法的第二參數(shù),可以忽略正則表達(dá)式中的空格和注釋。
7.20 如果只是匹配‘42’,‘4,123’而不匹配‘12,34,567’,‘1234’。正則表達(dá)式為(r'^\d{1,3}(,\d{3})*$'),可以很好的匹配。
如果想要從一段文字中將以每三位數(shù)用逗號隔開這種形式的數(shù)字篩選出來,下面是嘗試寫的代碼,如果有bug或者更為簡潔的代碼,歡迎留言!
import re
text = '42sdf1,234ds6,368,745ds12,34,567sdfs1234'
matches = []
# the regex of numbers
findNumRegex = re.compile(r'\d+,[\d,]+|\d+')
#Put all numbers in a list.
numberList = findNumRegex.findall(text)
# The regex of a number with commas for every three digits.
numRegex = re.compile(r'^\d{1,3}(,\d{3})*)
# Find all right numbers.
for number in numberList:
mo = numRegex.search(str(number))
try:
matches.append(mo.group())
except:
pass
print(matches)
7.21 re.compile(r'[A-Z]\w+\sNakamoto')可以很好的匹配。
7.22
re.compile(r'''(Alice|Bob|Carol) # people name
\s # white space
(eats|pets|throws) # motion
\s # white space
(apples|cats|baseballs) # things
\.$ # period
''', re.VERBOSE|re.I)
可以很好的匹配。