正则表达式
import re
# + :一个或者多个
# ?:0个或者1个
m = '100 BROAD'
s = '100 BROAD ROAD APT. 3'
print s[:-11] + s[-11:].replace('ROAD', 'RD.')
print re.sub('ROAD$', 'RD.', m)
print re.sub('\\bROAD\\b', 'RD. ', s)
print re.sub(r'\bROAD\b', 'RD.', s) # 匹配字符串中作为整个单词出现的'ROAD'
pattern = '^M?M?M?$' # $字符限制模式只能够在一个字符串的结尾匹配。
print re.search(pattern, 'M') # 当和模式开头的字符 ^ 结合使用时,这意味着模式必须匹配整个串
# •100 = C •200 = CC •300 = CCC •400 = CD •500 = D •600 = DC •700 = DCC •800 = DCCC •900 = CM
pattern = '^M?M?M?(CM|CD|D?C?C?C?)$'
print re.search(pattern, 'MMMCCC')
print re.search(pattern, 'MCMC')
pattern = '^M{0,3}$'
pattern = '^M?M?M?(CM|CD|D?C?C?C?)$' # 百位
pattern = '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)$' # 十位
pattern = '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$' # 个位
pattern = """
^ # beginning of string
M{0,3} # thousands - 0 to 3 M's
(CM|CD|D?C{0,3}) # hundreds - 900 (CM), 400 (CD), 0-300 (0 to 3 C's),
# or 500-800 (D, followed by 0 to 3 C's)
(XC|XL|L?X{0,3}) # tens - 90 (XC), 40 (XL), 0-30 (0 to 3 X's),
# or 50-80 (L, followed by 0 to 3 X's)
(IX|IV|V?I{0,3}) # ones - 9 (IX), 4 (IV), 0-3 (0 to 3 I's),
# or 5-8 (V, followed by 0 to 3 I's)
$ # end of string
"""
print "检验松散正则表达式", re.search(pattern, 'MMMDCCCLXXXVIII', re.VERBOSE)
# •忽略空白符。空格符,制表符,回车符不匹配它们自身,它们根本不参与匹配。(如果你想在松散正则表达式中匹配一个空格符,你必须在它前面添加一个反斜线符号对它进行转义。)
phonePattern = re.compile(r'^(\d{3})\D+(\d{3})\D+(\d{4})\D+(\d+)$')# \D+ 一个或者多个不是数字的任意字符
# \d 任意一个数字 0~9
#{3} 精确匹配三个数
phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') #任意位置开始,
phonePattern.search('work 1-(800) 555.1212 #1234') # 因为\D*,不能是数字,1打破了查询的条件
phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') # 去掉开头的#
# 最终版本 # x{n,m} 匹配 x 字符,至少 n 次,至多 m 次
# (x) 一般情况下表示一个记忆组 (remembered group)。你可以利用 re.search 函数返回对象的 groups() 函数获取它的值。
# •^ 匹配字符串的开始。 •$ 匹配字符串的结尾。 •\b 匹配一个单词的边界。 •\d 匹配任意数字。•\D 匹配任意非数字字符。
# •x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。
# •x* 匹配0次或者多次 x 字符。
# •x+ 匹配1次或者多次 x 字符。
phonePattern = re.compile(r'''
# don't match beginning of string, number can start anywhere
(\d{3}) # area code is 3 digits (e.g. '800')
\D* # optional separator is any number of non-digits
(\d{3}) # trunk is 3 digits (e.g. '555')
\D* # optional separator
(\d{4}) # rest of number is 4 digits (e.g. '1212')
\D* # optional separator
(\d*) # extension is optional and can be any number of digits
$ # end of string
''', re.VERBOSE)
print phonePattern.search('work 1-(800) 555.1212 #1234').groups()
('800', '555', '1212', '1234')
print phonePattern.search('800-555-1212')
('800', '555', '1212', '')