python re 正则表达式汇总

luofuIT成长记录 2020-03-27

import re # text = "1a+_1hello\n" # text1 = ‘0731-8888888 abc‘ # ret = re.match(‘he‘,text) # ret = re.match(‘.‘,text) #.表示可以匹配任意字符 # ret = re.match(‘\d‘,text) # 匹配到数字 # ret = re.match(‘\D‘,text) # 匹配的任意非数字和\d相反 # ret = re.match(‘\s‘,text) #匹配空白字符(\n,\t,\r)以上都是开头匹配的状态 # ret = re.match(‘\w‘,text) # 匹配a-z A-Z 数字和下划线 # ret = re.match(‘\W‘,text) # 和\w相反的 # ret = re.match(‘[a1]‘,text) # [] 组合的方式 匹配1 或是 a # ret = re.match(‘[\d\-]+‘,text1) #- 要特殊转义下 才表示- ;[\d\-]表示匹配到一个字符 是数字或是 - 开头的,如果是多个的话用+ # ret = re.match(‘[^0-9]‘,text1) # 匹配到0-9的数字,如果用一个^表示非 # ret = re.match(‘[a-zA-Z0-9_]‘,text1) #这个和\w一样的效果 # ret = re.match(‘[^a-zA-Z0-9_]‘,text1)# 这个是和\W一样 # print(ret.group()) ##########匹配多个字符: # text = "1a+_1hello\n" # text1 = ‘0731-8888888 abc‘ # # ret = re.match(‘\d*‘,text1)# * 表示匹配前面0个或是任意多个字符 # ret = re.match(‘\w+‘,text1) # + 匹配一个或者多个字符,最少一个 按照全面的字符匹配是字符或是数字 # ret = re.match(‘\w?‘,text1) # ?匹配一个或是0个,要么就匹配一个 # ret = re.match(‘\w{2}}‘,text1) # {} 匹配多少个 # ret = re.match(‘\{m,n}+‘,text1) # {m,n}匹配m 到 n个字符 # print(ret.group()) ########## # text = ‘18534523233‘ # text1 = ‘‘ # text2 = ‘http://baidu.com‘ # text3 = ‘42344519900707551x‘ # 要求1开头 2位可以是34587 后面9位随意: # ret = re.match(‘1[34587]\d{9}‘,text) 匹配手机号码 # ret1 = re.match(‘[a-z0-9]+\.[a-z]+‘,text1) # 匹配邮箱 # ret2 = re.match(‘(http|https|ftp)://[^\s]+‘,text2) # print(len(text3)) # ret3 = re.match(‘\d{17}[\dxX]‘,text3) # 匹配shenfenzheng # print(ret3.group()) ################## #脱子豪 ^ 表示以什么开始 # text3 = ‘42344519900707551x‘ # text4 = ‘‘ # ret3 = re.match(‘^4‘,text3) # 匹配shenfen证,match 函数自带^字号 表示以什么开始 # ret3 = re.search(‘^4‘,text3) # search不自带,所以^表示已4开头的 从什么开始 ## $表示以什么结尾 # ret3 = re.match(‘\$‘,text3) ## 默认情况下 匹配多个字母 这个是贪婪模式 ,非贪婪模式就是后面? # ret3 = re.match(‘\d+?‘,text3) # 结果是 41042319830707541 # ret3 = re.match(‘\d+‘,text3) # 结果是4 安装最小条件匹配 满足条件最短的那个 # text = ‘<h1>标题</h1>‘ # ret3 = re.match(‘<.+>‘, text) ## 结果就是 <h1>标题</h1> 贪婪模式 按照最长的匹配 # ret3 = re.match(‘<.+?>‘, text) ## <h1> 这个是非贪婪模式按照最小的匹配 # print(ret3.group()) # # ret4 = re.match(‘[1-9]\d?$|100$‘, text) # 1-9]\d?只能匹配前面的两位10, 所以匹配不到100, 但是$后10结尾 没有匹配到,然后就匹配了100 #######################转义字符 \ , \\ , \\\\ r##########: # test = ‘dfasdfsdf is $99 dfd‘ # ret = re.search(‘\$\d+‘,test) # \ 转义字符, search 是对整个字符串进行search,但是match是从字符串的第一个开始匹配 # print(ret.group()) # \n 整个是转义字符,如果要去掉转义字符的话 加一个\ , 变成了 \\n # text = r‘\n‘ , r表示raw 这样就表示了 \n # # \ 在正则表达式和python都是做转义的, # text = ‘\c‘ # # python: ‘\\n’ = \n # #\\\\n == \\n # #正则中:\n = # # \\n = \n # ret = re.match(‘\\\\c‘,test) # 所以要写4个,麻烦可以用: # ret = re.match(r‘\\c‘,test) # 在python这一次就不会转义了\\c,但是等到了正则的话 去掉 \ 就变成了 \c 就进行了匹配 # print(ret.group()) #######################re.groups, findall sub, split, compile ############ text = ‘the&apple price is $44 and sell $34‘ # res = re.search(‘.*(\$\d+).*(\$\d+)‘,text) # print(res.group()) # print(res.group(1)) # print(res.groups()) # res = re.findall(‘\$\d+‘,text) # print(res) ## output: [‘$44‘, ‘$34‘] # # res_replace = re.sub(‘\$\d+‘,‘0‘, text) # 函数替换 # print(res_replace) # text = ‘hello world ni hao‘ # res_split = re.split(‘ ‘,text) # res_split = re.split(‘‘,text) # print(res_split) text2 = "the number is 20.50" r = re.compile(‘\d+\.?\d*‘) ret = re.search(r,text2) # compile先放到内存 到时调用 ret = re.compile(r""" #起到一个注释的作用 \d* #小数点前面的数字 \.? # 小数点本身 """,re.VERBOSE) print(ret.group())

相关推荐