正则表达式

在 python 中,所有的正则表达式相关功能都包含在 re 模块中。

^ 匹配字符串开始. $ 匹配字符串结尾
为了在正则表达式中表达这个独立的词,你可以使用‘\b’,'\'必须被转义要用'\\'
为了解决‘\’字符传染的问题,可以使用原始字符串。这只需要在字符串的前面添加一个字符‘r’,在处理正则表达式建议使用原始字符串
re.sub(r'\bROAD\b', 'RD.', s) # \b表示右边必须有一个分割符,就是说需要替换在字符串的任意位置匹配独立的‘ROAD’单词

使用语法{N,M}
pattern = '^M?M?M?$' 等价于pattern = '^M{0,3}$'
匹配字符串

圆括号定义了三个不同的匹配模式,他们是用竖线分隔,表示一个匹配完一个部分。
一个括号是一个组
pattern =
'^M?M?M?(CM|CD|D?C?C?C?)(XC|XL|L?X?X?X?)(IX|IV|V?I?I?I?)$'
与上面的等价
pattern =
'^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$'

松散正则表达式,可读性更好
空白符被忽略。空格、制表符和回车在正则表达式中并不会匹配空格、制表符、回车。如果你想在正则表达式中匹配他们,可以在前面加一个\来转义
注释信息被忽略。松散正字表达式中的注释和 python 代码中的一样,都是以#开头直到行尾。它可以在多行正则表达式中增加注释信息,这就避免了在 python 代码中的多行注释。他们的工作方式是一样的。
pattern = '''
^ # beginning of string
M{0,3} # thousands ‐ 0 to 3 Ms
(CM|CD|D?C{0,3}) # hundreds ‐ 900 (CM), 400 (CD), 0‐300 (0 to 3 Cs),
# or 500‐800 (D, followed by 0 to 3 Cs)
(XC|XL|L?X{0,3}) # tens ‐ 90 (XC), 40 (XL), 0‐30 (0 to 3 Xs),
# or 50‐80 (L, followed by 0 to 3 Xs)
(IX|IV|V?I{0,3}) # ones ‐ 9 (IX), 4 (IV), 0‐3 (0 to 3 Is),
# or 5‐8 (V, followed by 0 to 3 Is)
$ # end of string
'''
匹配的时候加上参数 re.VERBOSE
re.search(pattern, 'M', re.VERBOSE)

匹配美国电话号码的例子
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('800‐555‐1212')

总结
^ 匹配字符串开始位置。
$ 匹配字符串结束位置。
\b 匹配一个单词边界。
\d 匹配一个数字。
\D 匹配一个任意的非数字字符。
x? 匹配可选的 x 字符。换句话说,就是 0 个或者 1 个 x 字符。
x* 匹配 0 个或更多的 x。
x+ 匹配 1 个或者更多 x。
x{n,m} 匹配 n 到 m 个 x,至少 n 个,不能超过 m 个。
(a|b|c) 匹配单独的任意一个 a 或者 b 或者 c。
(x) 这是一个组,它会记忆它匹配到的字符串。你可以用re.search 返回的匹配对象的 groups()函数来获取到匹配的值。

re.sub 替换 所有的 匹配项,而不仅仅是第一个匹配项。

re.sub('([^aeiou])y$', r'\1ies', 'vacancy')
\1记住第一个分组,并且把它放到该位置

在动态函数中使用外部参数值的技术称为 闭合【closures】
例子:
def build_match_and_apply_functions(pattern, search,
replace):
def matches_rule(word):
return re.search(pattern, word)
def apply_rule(word):
return re.sub(search, replace, word)
return (matches_rule, apply_rule)

匹配模式文件

with 语句创建了叫做 context【上下文】的东西:当 with 块结束时,Python 将自动关闭文件,即便是在 with 块中引发了例外也会这样。

生成器
含有yield被称为生成器
def make_counter(x):
... print('entering make_counter')
... while True:
... yield x
... print('incrementing x')
... x = x + 1
yield 命令的意思是这不是一个普通的函数。它是一次生成一个值的特殊类型函数。可以将其视为可恢复函数。
“yield” 暂停一个函数。“next()” 从其暂停处恢复其运行,会返回yeild那里的值。

转载于:https://www.cnblogs.com/wugh/archive/2011/11/29/2267988.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值