在分享一些学习出神的思考前,我们还是先来记住一些干货。 愿字符汇总: 匹配字符: . […] [^…] \d \D \w \W \s \S 匹配重复: * + ? {n} {m,n} 匹配位置: ^ $ \A \Z \b \B 其他: | () 详细内容:
匹配规则: 每个普通字符匹配其对应的字符
In : re.findall("ab","abcda") Out: ['ab']注意:可以匹配utf-8字符
元字符: | 匹配规则: 匹配 | 两侧任意正则表达式规则
In [13]: re.findall("ab|cd","abcdefgh") Out[13]: ['ab', 'cd']元字符: . 匹配规则: 匹配除换行外任意一个字符
In [16]: re.findall("张.丰","张三丰,张四丰,张五丰") Out[16]: ['张三丰', '张四丰', '张五丰']元字符 : [字符集] 匹配规则 : 匹配字符集中任意一个字符 表达形式: [abc#!好] --> 匹配其中任意一个 [0-9][a-z][A-Z] 匹配区间中任意一个 [_#?0-9a-z] 混合书写,区间写在后边
In [18]: re.findall("[aeiou]","hello world") Out[18]: ['e', 'o', 'o']元字符:[^字符集] 匹配规则:匹配除了字符集以外的任意一个字符
In [20]: re.findall("[^0-9]","27017 port") Out[20]: [' ', 'p', 'o', 'r', 't']元字符: ^ 匹配规则: 匹配字符串的开始位置
In [4]: re.findall("^Jame","Jame,hello") Out[4]: ['Jame']元字符: $ 匹配规则: 匹配目标字符串的结尾位置
in [6]: re.findall("Jame$","hi,Jame") Out[6]: ['Jame']元字符 : * 匹配规则: 匹配前面的字符出现0次或多次
In [7]: re.findall("wo*","wooooo~~w!") Out[7]: ['wooooo', 'w']元字符 : + 匹配规则: 匹配前面的字符出现1次或多次
In [9]: re.findall("wo+","wooooo~~w!") Out[9]: ['wooooo']元字符:? 匹配规则: 匹配前面的字符出现0次或1次
In [15]: re.findall("-?[0-9]+","age:19,score:-60,00087") Out[15]: ['19', '-60', '00087']元字符 : {n} 匹配规则 : 匹配前面的字符出现n次
In [16]: re.findall("1[0-9]{10}","tel: 18866889928") Out[16]: ['18866889928']元字符: {m,n} 匹配规则 : 匹配前面的字符出现m-n次
In [19]: re.findall("[1-9][0-9]{5,10}","qq:798119") Out[19]: ['798119']匹配任意(非)数字字符 元字符 : \d \D 匹配规则: \d 匹配任意数字字符 [0-9] \D 匹配任意非数字字符 [^0-9]
In : re.findall("\d{1,5}","mysql:3306,mongo:27017") Out[20]: ['3306', '27017'] in [20]: re.findall("\D{1,7}","mysql:3306,mongo:27017") Out[20]: ['mysql:', ',mongo:']元字符: \w \W 匹配规则: \w 匹配普通字符 \W 匹配非普通字符 说明: 普通字符指,数字,字母,下划线,汉字
In [21]: re.findall("\w+","server_addr=('127.0.0.1',8888)") Out[21]: ['server_addr', '127', '0', '0', '1', '8888'] In [22]: re.findall("\W+","server_addr=('127.0.0.1',8888)") Out[22]: ["=('", '.', '.', '.', "',", ')']元字符: \s \S 匹配规则: \s 匹配任意空字符 \S 匹配任意非空字符 说明: 空字符指, 空格 \r \n \t \v \f
In [30]: re.findall("\w+\s+\w+","hello world") Out[30]: ['hello world']元字符 : \A \Z 匹配规则: \A ===> ^ \Z ===> $
In [33]: re.findall("\A\w+\Z","helloworld") Out[33]: ['helloworld']使用技巧:如果正则表达式中同时出现^ $,则两者之间的正则表达式需要将目标字符串内容全部匹配
元字符:\b \B 匹配规则: \b 匹配单词边界 \B 匹配非单词边界 说明:单词边界指普通字符(\w代表的字符)与其他字符的交界位置
In [36]: re.findall(r"\bis\b","This is a test") Out[36]: ['is']贪婪模式: 默认情况下,匹配重复的元字符总是尽可能多的向后匹配更多内容。比如: * + ? {m,n} 非贪婪模式(懒惰) :让重复元字符尽可能少的匹配内容 贪婪–>非贪婪
* --》 *? + --》 +? ?--》 ?? {m,n} --> {m,n}? In [66]: re.findall(r"\(.+?\)","(李-白),(杜-甫),(白 居 易)") Out[66]: ['(李-白)', '(杜-甫)', '(白 居 易)']