可以将正则表达式分多行写出,每一行后面写上注释,这样使复杂正则表达式具有可读性。下面是一个匹配电话号码的例子:
phoneRegex = re.compile(r'''( (\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
\d{3} # first 3 digits
(\s|-|\.) # separator
\d{4} # last 4 digits
(\s*(ext|x|ext.)\s*\d{2,5})? # extension
)''',re.VERBOSE)
注意,后面要加上参数re.VERBOSE。
第一个参数,正则表达式,写在r'''()'''中的括号中。
可以按意义,分部分写。一部分写一行,后面加上注释。执行时,注释会被忽略。同时,多余的空白也会被忽略。如果用以前的方式写,则不小心写的空白,可能会改变正则表达式的意义。
下面看这个正则表达式匹配实例。
>>> mo=phoneRegex.search('111-123.2345')
>>> mo.group()
'111-123.2345'
>>> mo=phoneRegex.search('(111) 123.2344')
>>> mo.group()
'(111) 123.2344'
>>> mo=phoneRegex.search('(111).123.2344')
>>> mo.group()
'(111).123.2344'
>>> mo=phoneRegex.search('(111).123.2344 ext1234')
>>> mo.group()
'(111).123.2344 ext1234'
>>> mo=phoneRegex.search('(111).123.2344 x1234')
>>> mo.group()
'(111).123.2344 x1234'
>>> mo=phoneRegex.search('(111).123.2344 ext.1234')
>>> mo.group()
'(111).123.2344 ext.1234'