铁蹄羊

导航

python正则匹配中的flag标志怎么写

pubut@m620:~/regx$ python
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.

#首先打开要匹配的文件读出data准备匹配
>>> import re
>>> fileobj=open("/home/pubut/regx/test.load", "r")
>>> data=fileobj.read()
>>> print(data)

sadasd s da s || 10101010

asde31d12e21
e12e12e312r
412r
1
24r4rt4rtf2rt2r24
r4

########################

>>>

#我这里要匹配并获取的内容是|| \d+到########################之间的内容;

#接下来构造正则进行匹配

>>> matchobj=re.match(r'.*\|\|\s\d+(.+)\#+', data, re.M)
>>> print(matchobj)
None
>>>

#发现匹配不成功,觉得是中间有多个换行的原因,那么让 . 表示所有符号包括换行符是不是就可以了?

#re.S开启.点号表示所有符号包括换行符

>>> matchobj=re.match(r'.*\|\|\s\d+(.+)\#+', data, re.M|re.S)
>>> print(matchobj)
<_sre.SRE_Match object at 0x7ff9a66e5558>
>>>

#好了,这下成功了!看看捕获的分组内容是否是我们想要的

>>> print(matchobj.group(1))


asde31d12e21
e12e12e312r
412r
1
24r4rt4rtf2rt2r24
r4

#######################
>>>

#发现结果不怎么正确,最后的一排#我们不需要,发现是#的数量没有在正则中明确,而我们要捕获的内容的数量也没有明确;所以只要明确#的数量就可以了

#而我们的文本中的最后一排#是固定长度的,因此可以这样写

>>> matchobj=re.match(r'.*\|\|\s\d+(.+)\#{24}', data, re.M|re.S)
>>> print(matchobj.group(1))


asde31d12e21
e12e12e312r
412r
1
24r4rt4rtf2rt2r24
r4


>>>

#好了,大功告成。下面增加下flag标志的分类和说明

正则表达式修饰符 - 可选标志

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

修饰符描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

 

posted on 2017-09-20 11:31  铁蹄羊  阅读(170)  评论(0)    收藏  举报