3.2.2 正則表達式的功能

在本模块内主要包含函数、常量和异常。有一些函数是为简单使用,而降低一些特征。在大多数的正规的应用程序里,都是採用编译方式来使用正則表達式。

 

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'cai\d')

result = prog.match(r'cai7 caimouse cai cai8')

if result:

    print(result.group(0))

输出结果例如以下:

re.compile

cai7

 

re.A

re.ASCII

指定\w\W\b\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\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 \nmycar008\n', re.M)

if result:

    print(result) 

result = re.findall('^mycar','mycar007 \nmycar008\n')

if result:

    print(result)   

结果输出例如以下:

re.M, re.MULTILINE

['mycar', 'mycar']

['mycar']

 

re.S

re.DOTALL

点号‘.’是否表示换行符的标志。当设置时。包含表示换行符,否则不包含。

样例:

print('re.S, re.DOTALL')

result = re.findall('mycar\d+.','mycar007\nmycar008\n', re.S)

if result:

    print(result) 

result = re.findall('mycar\d+.','mycar007\nmycar008\n')

if result:

    print(result) 

结果输出例如以下:

re.S, re.DOTALL

['mycar007\n', 'mycar008\n']

['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 \nmycar008\n', re.X)

if result:

    print(result) 

result = re.findall(r"\d+\.\d*",'007.008 \nmycar008\n')

if result:

    print(result)

结果输出例如以下:

re.X, re.VERBOSE

['007.008']

['007.008']

 



蔡军生 QQ:9073204 深圳

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值