在本模块内主要包含函数、常量和异常。有一些函数是为简单使用,而降低一些特征。在大多数的正规的应用程序里,都是採用编译方式来使用正則表達式。
re.compile(pattern, flags=0)
编译一个正則表達式。并生成一个正則表達式对象,而这个对象能够用法match()和search()来进行匹配。
编译正則表達式的选项。能够通过flags来设置,这些參数能够通过或(|)的方式来进行组合。
这个编译步骤例如以下:
prog = re.compile(pattern)
result = prog.match(string)
与以下处理过程相同:
result = re.match(pattern, string)
只是,re.compile()的方式在多次反复使用这个正則表達式时是有非常大优势。因为会大大降低正則表達式的反复编译过程。值得注意是:最新版本号的Python会把re.compile()近期几次编译的对象缓存起来,假设仅仅是使用非常少正則表達式,不用操心反复编译的问题。
样例:
print('re.compile');
prog = re.compile(r'caid')
result = prog.match(r'cai7 caimouse cai cai8')
if result:
print(result.group(0))
输出结果例如以下:
re.compile
cai7
re.A
re.ASCII
指定w,W,,B,d,D。s和S使用ASCII模式之下。而不使用在UNICODE的模式。只是它仅仅有UNICODE里使用,而在8位的模式之下忽略这个标志。为了兼容曾经版本号的正則表達式,re.U标志还在使用,因为在Python3.0以后都默认使用UNICODE的方式,所以re.U是多余的。
样例:
print('re.A, re.ASCII')
prog = re.compile('深圳软件中心\d+', re.A)
result = prog.match('深圳软件中心007 用软件改变世界98')
if result:
print(result.group(0))
输出结果例如以下:
re.A, re.ASCII
深圳软件中心007
re.DEBUG
具体显示编译正則表達式的信息。
样例:
print('re.DEBUG')
prog = re.compile('深圳软件中心\d+', re.DEBUG)
result = prog.match('深圳软件中心007 用软件改变世界98')
if result:
print(result.group(0))
输出结果例如以下:
re.DEBUG
literal 28145
literal 22323
literal 36719
literal 20214
literal 20013
literal 24515
max_repeat 1 2147483647
in
category category_digit
深圳软件中心007
re.I
re.IGNORECASE
忽略大写和小写字母差别。会把[A-Z]集合字符转换为小写字母再来匹配。
假设UNICODE的字母是不受影响的。
样例:
print('re.I, re.IGNORECASE')
prog = re.compile('myCar\d+', re.IGNORECASE)
result = prog.match('mycar007 用软件改变世界98')
if result:
print(result.group(0))
结果输出例如以下:
re.I, re.IGNORECASE
mycar007
re.L
re.LOCALE
让w,W,,B,s和S依赖不同本地系统而改变定义范围。因为不同系统差异。导致使用这个特性会比較不可靠,推荐使用UNICODE的方式来消除这方面的差异。
样例:
print('re.L, re.LOCALE')
prog = re.compile('myCar\d+', re.I|re.L)
result = prog.match('mycar007 用软件改变世界98')
if result:
print(result.group(0))
结果输出例如以下:
re.L, re.LOCALE
mycar007
re.M
re.MULTILINE
指定多行模式匹配。当指定为此标志时,‘^’表示匹配字符串开头和全部换行符后面的字符串的开头。相同‘$’表示字符串结尾和全部换行符前的结尾。
样例:
print('re.M, re.MULTILINE')
result = re.findall('^mycar','mycar007 mycar008 ', re.M)
if result:
print(result)
result = re.findall('^mycar','mycar007 mycar008 ')
if result:
print(result)
结果输出例如以下:
re.M, re.MULTILINE
['mycar', 'mycar']
['mycar']
re.S
re.DOTALL
点号‘.’是否表示换行符的标志。当设置时。包含表示换行符,否则不包含。
样例:
print('re.S, re.DOTALL')
result = re.findall('mycard+.','mycar007 mycar008 ', re.S)
if result:
print(result)
result = re.findall('mycard+.','mycar007 mycar008 ')
if result:
print(result)
结果输出例如以下:
re.S, re.DOTALL
['mycar007 ', 'mycar008 ']
['mycar007', 'mycar008']
re.X
re.VERBOSE
这个标志主要用来给正則表達式进行排版和凝视使用。
当有这个标志时。正則表達式中的换行符会忽略,#号当作凝视的開始。这样方式能够提高正則表達式的阅读性,但功能并没有改变。
样例:
print('re.X, re.VERBOSE')
result = re.findall(r"""d + # the integral part
. # the decimal point
d * # some fractional digits""",
'007.008 mycar008 ', re.X)
if result:
print(result)
result = re.findall(r"d+.d*",'007.008 mycar008 ')
if result:
print(result)
结果输出例如以下:
re.X, re.VERBOSE
['007.008']
['007.008']
蔡军生 QQ:9073204 深圳