1、概览
在正则表达式内部有多种方法嵌入注释,从而使之具有自文档化 (self-documenting) 的能力
2、个案研究:街道地址
1)在字符串的结尾匹配
>>> s = '100 norTH MAIN ROAD' >>> import re #所有和正则表达式相关的功能都包含在 re 模块中 >>> re.sub('ROAD$','RD.',s) #只有当 'ROAD' 出现在一个字符串的尾部时才会匹配 '100 norTH broAD RD.'
字符$表示“字符串的末尾”(还有一个对应的字符,尖号^,表示“字符串的开始”)
2)匹配整个单词
>>> s = '100 broAD' >>> re.sub(r'\broAD$',s) #“原始字符串”,只要为字符串添加一个前缀 r 就可以了。 \b,它的含义是“单词的边界必须在这里” '100 broAD' >>> s = '100 broAD ROAD APT. 3' >>> re.sub(r'\broAD\b',s) #匹配字符串中作为整个单词出现的'ROAD' '100 broAD RD. APT 3'
3、个案研究:罗马字母
1)校验千位数
>>> import re >>> pattern = '^M?M?M?$' #匹配 0 次到 3 次字符 M,字符 ^ 和字符 $ 结合使用匹配整个串 >>> re.search(pattern,'MM') <SRE_Match object at 0106C290>
2)校验百位数
>>> import re >>> pattern = '^M?M?M?(CM|CD|D?C?C?C?)$' >>> re.search(pattern,'MCM') <SRE_Match object at 01070390>
4、使用 {n,m} 语法
普通方法:
>>> pattern = '^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$'
{n,m} 语法表达:
>>> pattern = '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'
5、松散正则表达式
带有内联注释 (Inline Comments) 的正则表达式
>>> pattern = """ ^ # beginning of string M{0,3} # thousands - 0 to 3 M's (CM|CD|D?C{0,3}) # hundreds - 900 (CM),400 (CD),0-300 (0 to 3 C's),# or 500-800 (D,followed by 0 to 3 C's) (XC|XL|L?X{0,3}) # tens - 90 (XC),40 (XL),0-30 (0 to 3 X's),# or 50-80 (L,followed by 0 to 3 X's) (IX|IV|V?I{0,3}) # ones - 9 (IX),4 (IV),0-3 (0 to 3 I's),# or 5-8 (V,followed by 0 to 3 I's) $ # end of string """ >>> re.search(pattern,'M',re.VERBOSE) #必须传递一个额外的参数 re.VERBOSE,标志着待匹配的正则表达式是一个松散正则表达式 <_sre.SRE_Match object at 0x008EEB48>
6、个案研究:解析电话号码
>>> phonePattern = re.compile(r''' # don't match beginning of string,number can start anywhere (\d{3}) # area code is 3 digits (e.g. '800') \D* # optional separator is any number of non-digits (\d{3}) # trunk is 3 digits (e.g. '555') \D* # optional separator (\d{4}) # rest of number is 4 digits (e.g. '1212') \D* # optional separator (\d*) # extension is optional and can be any number of digits $ # end of string ''',re.VERBOSE) >>> phonePattern.search('work 1-(800) 555.1212 #1234').groups() ('800','555','1212','1234') >>> phonePattern.search('800-555-1212') ('800','')
7、小结
熟悉下列技巧:
^ 匹配字符串的开始。
$ 匹配字符串的结尾。
\b 匹配一个单词的边界。
\d 匹配任意数字。
\D 匹配任意非数字字符。
x? 匹配一个可选的 x 字符 (换言之,它匹配 1 次或者 0 次 x 字符)。
x* 匹配0次或者多次 x 字符。
x+ 匹配1次或者多次 x 字符。
x{n,m} 匹配 x 字符,至少 n 次,至多 m 次。
(a|b|c) 要么匹配 a,要么匹配 b,要么匹配 c。
原文地址:https://www.jb51.cc/regex/362831.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。