''' 2 常用的正则表达式元字符 3 . 匹配换行符以外的任意单个字符 4 * 匹配位于'*'之前的字符或子模的0次或多次出现 5 + 匹配位于'+'之前的字符或子模式的1次或多次出现 6 - 用在[]之内用来表示范围 7 | 匹配位于'|'之前或之后的字符 8 ^ 匹配行首,匹配以^后面的字符开头的字符串 9 $ 匹配行尾,匹配以$之前的字符结束的字符串 10 ? 匹配位于'?'之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m}之后时,匹配模式是'非贪心的'。'非贪心的'模式匹配 11 尽可能短的字符串,而默认的'贪心的'模式匹配搜索到的、尽可能长的字符串。例如:在字符串'oooo'中,'o+?'只能匹配单个,而'o+'匹配所有o 12 \ 表示位于\之后的为转义字符 13 \num 此处的num是一个正整数,例如,'(.)\1'匹配两个连续的相同字符 14 \f 换页符匹配 15 \n 换行符匹配 16 \r 匹配一个回车符 17 \b 匹配单词头或单词尾 18 \B 与\b含义相反 19 \d 匹配任意数字,相当于[0-9] 20 \D 与\d含义相反,等效于[^0-9] 21 \s 匹配任何空白字符,包括空格、制表符、换页符,与[\f\n\r\t\v]等效 22 \S 与\s含义相反 23 \w 匹配任何字母、数字以及下划线,相当于[a-zA-Z0-9_] 24 \W 与\w含义相反,与[^a-zA-Z0-9_]等效 25 () 将位于()内的内容作为一个整体来对待 26 {} 按{}中的次数进行匹配 27 [] 匹配位于[]中的任意一个字符 28 [^xyz] ^放在[]表示反向字符集,匹配除x,y,z以外的任何字符 29 [a-z] 字符范围,匹配指定范围内的任何字符 30 [^a-z] 反向范围字符,匹配除小写英文字母之外的任何字符 31 '''
1 ''' 2 常用子模式扩展语法 3 (? P) 为子模式命名 4 (? iLmsux) 设置匹配标志,可以是几个字母的组合,每个字母含义与编译标志相同 5 (?:...) 匹配但不捕获该匹配的子表达式 6 (? P=groupname) 表示在此之前的命名为groupname的子模式 7 (? #...) 表示注释 8 (? =...) 用于正则表达式之后,表示如果'='后面的内容在字符串中出现则匹配,但不反回'='之后的内容 9 (?! ...) 用于正则表达式之后,表示如果'!'后2的内容在字符串中不出现则匹配,但不返回'='之后的内容 10 (? <=...) 用于正则表达式之前,与(? =...)含义相同 11 (? re模块使用
1 import re 2 ''' 3 compile() 创建模式对象 4 re.search() 在这种整个字符串中寻找模式,返回match对象或None 5 re.match() 从字符串的开始处匹配模式,返回match对象或None 6 re.findall() 列出字符串中模式的所有匹配项 7 re.split() 根据模式匹配项分割字符串 8 re.sub() 将字符串中所有pat的匹配项用repl替换 9 re.escape() 将字符串中所有特殊正则表达式转义 10 ''' 11 text='alpha.beta...gamma delta' #测试用的字符串 12 print(re.split('[\.]+',text)) 13 print(re.split('[\.]+',text,maxsplit=2)) #最多分隔2次) 14 print(re.split('[\.]+',text,maxsplit=1)) #最多分隔1次 15 pat = '[a-zA-Z]' 16 print(re.findall(pat,text)) #查找所有单词 17 # ['a', 'l', 'p', 'h', 'a', 'b', 'e', 't', 'a', 'g', 'a', 'm', 'm', 'a', 'd', 'e', 'l', 't', 'a'] 18 pat='{name}' 19 text='Dear {name}...' 20 print(re.sub(pat,'Mr.Dong',text)) #字符串替换 21 # Dear Mr.Dong... 22 s='a s d' 23 print(re.sub('a|s|d','good',s)) 24 # good good good 25 print(re.escape('http://www.python.org')) #字符串转义 26 # http\:\/\/www\.python\.org 27 print(re.match('done|quit','done')) #匹配成功,返回match对象 28 # <_sre.SRE_Match object; span=(0, 4), match='done'> 29 print(re.match('done|quit','doe!')) #匹配不成功 30 # None 31 print(re.search('done|quit','d!one!done')) #匹配成功 32 # <_sre.SRE_Match object; span=(6, 10), match='done'> 33 34 s='aaa bb c d e fff ' 35 print(' '.join(s.split())) #不使用正则表达式,直接使用字符串对象的方法 36 # aaa bb c d e fff 37 print(re.split('[\s]+',s)) 38 # ['aaa', 'bb', 'c', 'd', 'e', 'fff', ''] 39 print(re.split('[\s]+',s.strip())) #同时使用re模块中的方法和字符串对象的方法 40 # ['aaa', 'bb', 'c', 'd', 'e', 'fff'] 41 print(' '.join(re.split('[\s]+',s.strip()))) 42 # aaa bb c d e fff 43 print(' '.join(re.split('\s+',s.strip()))) 44 # aaa bb c d e fff 45 print(re.sub('\s+',' ',s.strip())) #直接使用re模块的字符串替换方法 46 # aaa bb c d e fff 47 48 ''' 49 下面的代码使用以'\'开头的元字符来实现字符串的特定搜索 50 ''' 51 example='China institute of business and Technology is a very beautiful school. ' 52 print(re.findall('\\ba.+?\\b',example)) #以字母a开头的完整单词,'?'表示非贪心模式 53 # ['and', 'a '] 54 print(re.findall('\\ba.+\\b',example)) #贪心模式的匹配结果 55 # ['and Technology is a very beautiful school'] 56 print(re.findall('\\ba\w*\\b',example)) 57 # ['and', 'a'] 58 print(re.findall('\\Bo.+?\\b',example)) 59 # ['ology', 'ool'] 60 print(re.findall('\\b\w*\\b',example)) #所有单词 61 # ['China', '', 'institute', '', 'of', '', 'business', '', 'and', '', 'Technology', '', 'is', '', 'a', '', 'very', '', 'beautiful', '', 'school', ''] 62 print(re.findall('\w+',example)) 63 # ['China', 'institute', 'of', 'business', 'and', 'Technology', 'is', 'a', 'very', 'beautiful', 'school'] 64 re.findall(r'\b\w.+?\b',example) #使用原始字符串 65 # ['China', 'institute', 'of', 'business', 'and', 'Technology', 'is', 'a', 'very', 'beautiful', 'school'] 66 print(re.split('\s',example)) #使用任何空白字符分隔字符 67 print(re.findall('\d+\.\d+\.\d+','Python 3.5.988')) #查找并返回x.x.x形式的数字 68 # ['3.5.988'] 69 print(re.findall('\d+\.\d+\.\d+','Python 3.5.988,3.54.45')) 70 71 ''' 72 使用正则表达式对象 73 首先使用re模块的compile()方法将正则表达式编译生成正则表达式对象,然后再使用正则表达式对象提供的方法进行字符串处理。使用编译后的正则表达式对象 74 不仅可以提高字符串处理速度,还提供了更加强大的字符串处理功能。 75 正则表达式对象math(string[,pos[,endpos]])方法用于在字符串开头或指定位置进搜索,模式必须出现在字符串开头或指定位置;searc(string[,pos[,endpos]]) 76 方法用于正整个字符串或指定范围中进行搜索;findall(strinng[,pos[,endpos]])方法用来在整个字符串中查找所有符合正则表达式的字符串并以列表形式返回 77 ''' 78 example='China Institute of Business and Technology' 79 pattern = re.compile(r'\bB\w+\b') #编译正则表达式对象,查找以B开头的单词 80 print(pattern.findall(example)) #使用正则表达式对象的findall()方法 81 # ['Business'] 82 pattern=re.compile(r'\w+y\b') #以字母y结尾的单词 83 print(pattern.findall(example)) 84 # ['Technology'] 85 pattern = re.compile(r'\b[a-zA-Z]{3}\b') 86 print(pattern.findall(example)) 87 # ['and'] 88 pattern.match(example) #从字符串开头开始匹配,失败返回空值 89 print(pattern.search(example)) #在整个字符串中搜索,成功 90 pattern = re.compile(r'\b\w*a\w*\b') #查找所有以字母a的单词 91 print(pattern.findall(example)) 92 # ['China', 'and'] 93 text ='He was carefully disguised but captured quickly by police.' 94 print(re.findall(r'\w+ly',text)) #查找所有以字母ly结尾的单词 95 # ['carefully', 'quickly']