最近在玩Python,觉得它是一个简练、但高效,而且很有意思的一门语言,据说在google是使用频率最高的三大语言之一了。今晚看的是<Dive into Python>的正则表达式部分,正则表达式是搜索、替换和解析复杂字符模式的一种强大而标准的方法。
字符串也有很多方法,可以进行搜索(index, find, 和 count), 替换(replace)和解析 (split), 但他们仅限于处理最简单的情况。搜索方法查找单个和固定编码的子串,并且他们总是大小写敏感的。对一个字符串s, 如果要进行大小写不敏感的搜索,则你必须调用 s.lower() 或 s.upper() 将s转换成全小写或者全大写,然后确保搜索串有着相匹配的大小写。replace 和 split方法有着类似的限制。
如果你要解决的问题利用字符串函数能够完成,你应该使用他们。他们快速、简单且容易阅读,而对于快速、简单、可读性强的代码等方面有很多内容。但是,如果你发现你用了许多不同的字符串函数和 if语句来处理一个特殊情况,或者你组合使用了 split 、join 等函数而导致用一种奇怪的甚至读不下去的方式理解列表,此时,你也许需要转到正则表达式了。
其中有个电话号码匹配正则表达语句巨牛,一条语句完成了可能c++或JAVA 几十条语句完成的功能,而且如果考虑时效开销,Python的正则表达式的优势是十分明显的。以下是通过正则表达式匹配电话号码的语句:
>>> phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
>>> phonePattern.search('(800)5551212 ext. 1234').groups()
('800', '555', '1212', '1234')
>>> phonePattern.search('800-555-1212').groups()
('800', '555', '1212', '')
>>> phonePattern.search('work 1-(800) 555.1212 #1234')
>>>
然而改进后的表达式更牛,摆到明是无论如何都要找到你丫电话号码了,哈哈
>>> phonePattern = re.compile(r'(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$')
>>> phonePattern.search('work 1-(800) 555.1212 #1234').groups()
('800', '555', '1212', '1234')
>>> phonePattern.search('800-555-1212')
('800', '555', '1212', '')
>>> phonePattern.search('80055512121234')
('800', '555', '1212', '1234')
让我想起了c++或java语句来实现他的N多个if , for,iptr++。。。。。,所以说Python在某些方面还是很有优势的。咔咔,下面贴写Python的小结:
^ 匹配字符串的开始。
$ 匹配字符串的结尾。
\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。
(x) 一般情况下表示一个记忆组(remembered group). 你可以利用re.search函数返回对象的groups()函数获取它的值。