Created
January 11, 2019 07:02
-
-
Save caoya171193579/f11376de06d1e9b75a3f576589c7cf42 to your computer and use it in GitHub Desktop.
进阶
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
编译标志 (S ,I ,L ,M , X ) | |
re.S: . 点号可以匹配除了换行符“\n”以外的任何字符, 但是是\n 就会返回空列表。 在匹配规则的后面加上 re.S 就是 .的位置可以匹配任何字符,包括换行符。 | |
>>> import re | |
>>> | |
>>> cs = r"scb.wq" | |
>>> | |
>>> re.findall(cs,"scbzwq") | |
['scbzwq'] | |
>>> re.findall(cs,"scbawq") | |
['scbawq'] | |
>>> cs = r"scb\n\twq" | |
>>> | |
>>> cs = r"scb.wq" | |
>>> | |
>>> re.findall(cs,"scb\nwq",re.S) | |
['scb\nwq'] | |
re.I: 使匹配不区分大小写。 | |
re.L: 做本地化识别(locale-aware :区域感知)匹配.法语等“é”,“ Ç, ç” ,语言识别。 | |
re.M: 多行变量的字符串模式下匹配。 识别\n 换行符。 | |
>>> se = """ | |
... wo shi zhu | |
... yi zhi zhu | |
... wo shi gou | |
... yi zhi gou | |
... """ | |
>>> se | |
'\nwo shi zhu\nyi zhi zhu\nwo shi gou\nyi zhi gou\n' | |
>>> cd = r"wo" | |
>>> | |
>>> re.findall(cd,se) | |
['wo', 'wo'] | |
>>> cd = r"^wo" #正则是开头是wo 的字符串。 | |
>>> | |
>>> re.findall(cd,se) | |
[] | |
>>> re.findall(cd,se,re.M) | |
['wo', 'wo'] | |
>>> cd = r"^yi" | |
>>> re.findall(cd,se,re.M) | |
['yi', 'yi'] | |
re.X: 多行的正则表大厦,加上re.X 才能更高的识别换行符。 | |
>>> import re | |
>>> | |
>>> | |
>>> tel = """ | |
... \d{3,4} #任意的几个0-9 数值, 最少出现3次最多4次 | |
... -? #- 可有可无 | |
... \d{8}$ # 结尾是0-9 八位任意数值,超过或不够都不匹配。 | |
... """ | |
>>> | |
>>> re.findall(tel,"010-12345678") | |
[] | |
>>> tel | |
'\n\\d{3,4}\n-?\n\\d{8}$\n' | |
>>> re.findall(tel,"010-12345678",re.X) | |
['010-12345678'] | |
>>> | |
>>> re.findall(tel,"010-123456780",re.X) | |
[] | |
>>> re.findall(tel,"010123456780",re.X) | |
['010123456780'] | |
>>> | |
########################################### | |
正则里面的分组。 | |
"(" 和 ")" | |
>>> import re | |
# 定义一个邮箱类型的正则,(\w{3}:前三位是除符号外任意数字或字母;@第四为; \w+ : 重复除符号外任意数字或字母; | |
(\.com|\.cn):表示结尾是.com或.cn,这里()从新定义一个组,组里面可以表示或的意思,或者其它规则, 因为.点号是元字符,在re模块下有其它作用,所以用\反斜杠做转译让点号在规则里就是点号,无其它意义。) | |
>>> email = r'\w{3}@\w+(\.com|\.cn)' | |
>>> | |
#re.match() 参数,如果我们匹配的邮箱符合规则,会返回一个match对象,如果不匹配,返回空。 | |
>>> re.match(email,"[email protected]") | |
<_sre.SRE_Match object at 0x7f7bcfa53648> | |
>>> re.match(email,"[email protected]") | |
<_sre.SRE_Match object at 0x7f7bcfa53738> | |
>>> re.match(email,"[email protected]") | |
>>> re.match(email,"[email protected]") | |
>>> re.match(email,"[email protected]") | |
<_sre.SRE_Match object at 0x7f7bcfa53648> | |
>>> re.match(email,"[email protected]") | |
>>> | |
#做一个变量让x 等于匹配的match 对象。 | |
>>> x = re.match(email,"[email protected]") | |
>>> | |
>>> x | |
<_sre.SRE_Match object at 0x7f7bcfa536c0> | |
>>> | |
#group() 参数会把match对象以源值 返回。 | |
>>> x.group() | |
'[email protected]' | |
>>> | |
#分组会优先匹配出来(email = r'\w{3}@\w+(\.com|\.cn)' : | |
(\.com|\.cn) 为一个分组) | |
>>> re.findall(email,"[email protected]") | |
['.com'] | |
>>> re.findall(email,"[email protected]") | |
['.cn'] | |
>>> | |
################################################################# | |
分组:() | |
 | |
#正则为匹配hello src=任何除换行符的数字或字母 yes | |
>>> r1 = r"hello src=.+ yes" | |
>>> re.findall(r1,s) #正则匹配变量 s ,返回和我们正则定义相同的字符串。 | |
#用() 分组=等号后面的字符串(.+:重复任何除换行符的数字或字母),然后re.findall()参数返回我们想看到的字符串。 | |
写爬虫的时候会经常用到分组可以是一个电话号,一个姓名,邮箱,地址,链接,图片标签 等。。。。 | |
>>> r1 = r"hello src=(.+) yes" | |
>>> re.findall(r1,s) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment