Python-正则表达式-re模块
re.match | 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式 result.group(1),获得分组1的内容
result.groups(),获得匹配的全部内容
|
re.search | 扫描整个字符串并返回第一个成功的匹配 可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式 |
re.findall | findall函数返回的总是正则表达式在字符串中所有匹配结果的列表 很灵活,难度也大,特别是有了分组之后,见附件文章。 |
(?: re) | 类似 (...), 但是不表示一个组,很有意思 |
相关文章:爬虫中的正则表达式
# -*- coding: utf-8 -*- __author__ = 'duohappy' import re if __name__ == '__main__': # ^ start,匹配一个位置,字符串的开头 # $ end,匹配一个位置,字符串的结尾 # . except \n --->除了换行符之外的字符 text = 'c++ p python2 python3 perl ruby p我们 lua java javascript php4 php5 c cc' #字符串开头位置后面有c,后面还跟上两个字符,字符不为换行符 print(re.findall(r'^c..', text)) # 加上 ^ ,排除了 cri #在字符串开头位置后面有p,后面还跟3个字符,字符不为换行符 print(re.findall(r'^p...', text)) # 字符串的开头位置!,所以这条语句没有把perl匹配出来 print(re.findall(r'^c', text)) # 同理,字符串结尾的位置前面有一个c print(re.findall(r'c$', text)) #\b word boundary,单词分界位置,而不是字符串的开头位置! # \B ,not \b print(re.findall(r'\bc\w+\b', text)) # + 1-inf ,限定前一个字符的出现的次数 # * 0-inf # ? 0-1 # 匹配出现一次或者多次c print(re.findall(r'c+', text)) # \+ 表示一个+字符,后面+,表示+字符出现一次或者多次 print(re.findall(r'c\++', text)) #[] or,可选的范围 # p开头,后面跟1个或者多个字母 print(re.findall(r'p[a-zA-Z]+', text)) # p开头,后面跟0个或多个字母 print(re.findall(r'p[a-zA-Z]*', text)) # 所以会比上面多匹配一个 # p开头,后面跟0个或1个字母 print(re.findall(r'p[a-zA-Z]?', text)) #{} repeat,前一个字符出现的次数 #以p开头,后面跟4个或多个字母 print(re.findall(r'p[a-zA-Z]{4,}', text)) # ^,not 非 #c开头,后面接一个或多个非字母 print(re.findall(r'c[^a-zA-Z]+', text)) # |,or print(re.findall(r'[pj][a-zA-Z]+', text)) print(re.findall(r'p[a-zA-Z]+|j[a-zA-Z]+', text)) # 与上面的效果等同 # \w [a-zA-Z0-9_汉字] print(re.findall(r'p\w+', text)) # \d [0-9],\D [^0-9] print(re.findall(r'p\w+\d', text)) #\s [ \t\n\r\f\v],匹配任意空白字符 #\S,同\D print(re.findall(r'p\w+\s', text)) # *? 懒惰模式,匹配的字符越少越好 # +? 懒惰模式 # 贪婪模式,匹配的字符越多越好 print(re.findall(r'p[a-z]*', text)) print(re.findall(r'p[a-z]*?', text)) print(re.findall(r'p[a-z]+?\b', text)) #分组 #我们已经提到了怎么重复单个字符(直接在字符后面加上限定符就行了)如 p{4,} #但如果想要重复多个字符又该怎么办?你可以用小括号来指定子表达式(也叫做分组)(p\w+\b){3,},前面()即为分组 print(re.findall(r'(p[a-zA-Z]+)(\d)', 'python3 php5')) #在'python3 php5'这个字符串中,找(p[a-zA-Z]+),(\d) a = re.search(r'(p[a-zA-Z]+)(\d)', 'python3 php5') print(a.group(0)) #compile #先编译一个匹配项 pattern = re.compile(r'\bp\w+') print(pattern.findall(text))
写出生活