Created
January 1, 2019 08:17
-
-
Save caoya171193579/2ed293f1daf116495bdcf2fa3996d34a 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
\ : 反斜杠,转义字符。 | |
前言: | |
>>> import re | |
>>> r = r"^abc" #定义规则为开头是abc的字符集 | |
>>> re.findall(r,'abc') | |
['abc'] | |
>>> re.findall(r,'adcsds') #与规则不同则会返回空列表 | |
[] | |
>>> re.findall(r,'^abc') | |
[] | |
#当我们想让元字符^尖角号不起作用,我们就用元字符\ 来做转译让^只做为字符串里面的值。 | |
>>> r = r"\^abc" #我们的规则使用了\ ,^就不起作用了 。 | |
>>> re.findall(r,'^abc') | |
['^abc'] | |
>>> re.findall(r,'^abc ^abc ^abc') #用规则匹配多个 ^abc。 | |
['^abc', '^abc', '^abc'] | |
>>> | |
\ :反斜杠后面可以加不通的字符以表示不同特殊意义。 | |
也可以用于取消所有的元字符: \[ 或 \\ | |
\d 匹配任何十进制数; 它相当于类 [0-9]。 规则是匹配数字中的任何。 | |
>>> r = r"\d" | |
>>> | |
>>> r | |
'\\d' | |
>>> re.findall(r,'123') | |
['1', '2', '3'] | |
>>> re.findall(r,'123456789') | |
['1', '2', '3', '4', '5', '6', '7', '8', '9'] | |
>>> re.findall(r,'1234567890') | |
['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] | |
>>> re.findall(r,'12345678910') | |
['1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0'] | |
>>> re.findall(r,'1234567891011') | |
['1', '2', '3', '4', '5', '6', '7', '8', '9', '1', '0', '1', '1'] | |
\D 匹配任何非数字字符,它相当于类 [^0-9]。规则是匹配除了数字的任何。 | |
>>> r = r"\D" | |
>>> | |
>>> r | |
'\\D' | |
>>> re.findall(r,'djajdla') | |
['d', 'j', 'a', 'j', 'd', 'l', 'a'] | |
>>> re.findall(r,'4141') | |
[] | |
>>> re.findall(r,'**&^*&%') | |
['*', '*', '&', '^', '*', '&', '%'] | |
>>> | |
\s 匹配任何空白字符:它相当于类 [\t\n\r\f\v]。规则是匹配任何空格,一个空格返回一个逗号。 | |
>>> r = r"\s" | |
>>> re.findall(r,'**&^*&%') | |
[] | |
>>> re.findall(r,' ') | |
[' ', ' ', ' ', ' ', ' ', ' '] | |
>>> re.findall(r,' ') | |
[' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] | |
>>> | |
\S 匹配任何非空白字符:它相当于类 [^\t\n\r\f\v]。规则是匹配任何除了空格的任何字母数字和符号。 | |
>>> r = r"\S" | |
>>> re.findall(r,' ') | |
[] | |
>>> re.findall(r,'213kkddDWQD……&*%¥%') | |
['2', '1', '3', 'k', 'k', 'd', 'd', 'D', 'W', 'Q', 'D', '\xe2', '\x80', '\xa6', '\xe2', '\x80', '\xa6', '&', '*', '%', '\xef', '\xbf', '\xa5', '%'] | |
>>> | |
\w 匹配任何字母数字字符:它相当于类 [a-zA-Z0-9_]。规则是匹配键盘上除了符号的任意字符,包括空格。 | |
>>> r = r"\w" | |
>>> re.findall(r,'213kkddDWQD90^#%&* dfs ') | |
['2', '1', '3', 'k', 'k', 'd', 'd', 'D', 'W', 'Q', 'D', '9', '0', 'd', 'f', 's'] | |
>>> re.findall(r,' 2 1 dD0^#%&* dfs ') | |
['2', '1', 'd', 'D', '0', 'd', 'f', 's'] | |
>>> | |
\W 匹配任何非字母数字字符:它相当于类 [^a-zA-Z0-9_]。规则是匹配符号和空格,除了字母和数字以外。 | |
>>> r = r"\W" | |
>>> | |
>>> re.findall(r,' 2 1 dD0^#%&* dfs ') | |
[' ', ' ', ' ', '^', '#', '%', '&', '*', ' ', ' ', ' '] | |
>>> re.findall(r,' %&^$#*((*&$$') | |
[' ', '%', '&', '^', '$', '#', '*', '(', '(', '*', '&', '$', '$'] | |
>>> re.findall(r,' 2314dsfdsf') | |
[' '] | |
>>> | |
########################################### | |
重复元字符: | |
正则表达式第一功能是能够匹配不定长的字符集,另一个功能就是你可以指定正则表达式的一部分的重复次数。 | |
*: 星号 | |
指定前一个字符可以被匹配零次或更多次,而不是只有一次,匹配引擎会试着重复尽可能多的次数(不超过整数界定范围,20忆) | |
(a[bcd]*b -- "abcbd...") | |
#定义规则是开头是010的北京号码。 后面是八位任意的数字组合,如果不够八位就不符合我们的规则,返回空列表。(\d 八个就是八位数) | |
>>> r = r"^010-\d\d\d\d\d\d\d\d" | |
>>> | |
>>> re.findall(r,'010-23445567') | |
['010-23445567'] | |
>>> re.findall(r,'010-2344556') | |
[] | |
>>> | |
################################################################ | |
{}:花括号,可以定义重复的次数。 | |
>>> r = r"^010-\d{8}" #规则是开头010-后面任何八位数字,相当于(\d重复八次) | |
>>> re.findall(r,'010-2344556') | |
[] | |
>>> re.findall(r,'010-23445567') | |
['010-23445567'] | |
>>> | |
############################################## | |
*:星号,定义星号前一个字符可以重复零次、一次或数次 | |
>>> r = r"ab*" #规则是重复b 零次或者更多次,可以肯本不出现 | |
>>> re.findall(r,'a') #b 不出现也可以匹配 | |
['a'] | |
>>> re.findall(r,'ab') | |
['ab'] | |
>>> re.findall(r,'abbbbbbb') | |
['abbbbbbb'] | |
>>> re.findall(r,'abbbbbbbabbf') #只会重复b ,b 后面跟的字符不对,就会另进入一组。 | |
['abbbbbbb', 'abb'] | |
>>> re.findall(r,'ababababababab') | |
['ab', 'ab', 'ab', 'ab', 'ab', 'ab', 'ab'] | |
>>> | |
############################################### | |
+:加号 | |
表示匹配一或更多次。 | |
注意*和+之间的不同;*匹配零或更多次,所以可以根本就不出现,而+则需求至少出现一次。 | |
>>> import re | |
>>> | |
>>> | |
>>> r = r"ab+" #规则是重复b 一次或多次,最起码要出现一次,来匹配表达式 | |
>>> | |
>>> re.findall(r,'a') #未出现,则不匹配,返回空列表 | |
[] | |
>>> re.findall(r,'ab') | |
['ab'] | |
>>> re.findall(r,'abbbbb') | |
['abbbbb'] | |
>>> re.findall(r,'ababababab') | |
['ab', 'ab', 'ab', 'ab', 'ab'] | |
>>> | |
?:问号 , 前面的一个字符可有可无。 | |
匹配一次或零次,你可以认为它用于标识某事物是可选的。 | |
>>> r = r"^010-?\d{8}$" #规则是匹配开头是010,八位数字结尾的电话号码,?问号前面的- 可有可无。 | |
>>> | |
>>> re.findall(r,'010-12345678') | |
['010-12345678'] | |
>>> re.findall(r,'01012345678') | |
['01012345678'] | |
>>> r = r"^010?-\d{8}$" #规则是匹配开头是010,八位数字结尾的电话号码,?问号前面的 0 可有可无。 | |
>>> re.findall(r,'010-12345678') | |
['010-12345678'] | |
>>> re.findall(r,'01-12345678') | |
['01-12345678'] | |
>>> re.findall(r,'0-12345678') | |
[] | |
>>> | |
################################################ | |
贪婪模式和非贪婪模式。。。。 | |
>>> xiaoming = r"ab+" #重复b 一次或多次。 | |
>>> | |
>>> re.findall(xiaoming,'abbbbbbbbbbbbbbbbb') #贪婪模式 | |
['abbbbbbbbbbbbbbbbb'] | |
>>> xiaoming = r"ab+?" #规则是重复b一次或多次,?但是+可有可无,最后取ab 非贪婪模式一次。 | |
>>> re.findall(xiaoming,'abbbbbbbbbbbbbbbbb') | |
['ab'] | |
>>> | |
################################################ | |
{} :花括号。 {m,n} | |
其中m和n是十进制整数,该限定符的意思是至少有m个重复,最多到n个重复。 | |
>>> xiaoming = r"a{0,4}" #规则为重复a零次到4次,多或者少都会认为不匹配。 | |
>>> re.findall(xiaoming,'') #0次 | |
[' '] | |
>>> r = r"a{1,4}" | |
>>> re.findall(r,'') #至少一次,不匹配返回空列表。 | |
[] | |
>>> | |
####################################### | |
>>> re.findall(xiaoming,'a') | |
['a', ''] | |
>>> re.findall(xiaoming,'aa') | |
['aa', ''] | |
>>> re.findall(xiaoming,'aaa') | |
['aaa', ''] | |
>>> re.findall(xiaoming,'aaaa') | |
['aaaa', ''] | |
>>> re.findall(xiaoming,'aaaaa') | |
['aaaa', 'a', ''] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment