正则表达式是经常用到的一直字符串查找&匹配技术,通过正则表达式来处理字符串,远比字符串函数/方法要易读&易维护。
Python使用的正则表达式语法,和TCL、Perl完全一样。因此,推荐一本非常好的讲解正则表达式的书籍,是《TCL/TK编程权威指南》,专门有一章循序渐进讲解正则表达式的语法。中文第三版扫描版下载地址:
英文第四版的下载地址:
中文看起来比较快,毕竟是母语。但有些术语翻译得很诡异,所以还是要对照英文来看。
注:上面的英文版是chm格式的文件,在Linux下面可以按照chmsee软件。
Python网站上正则表达式的页面是:https://docs.python.org/3/library/re.html,这个页面提供有大量的示例,可以迅速掌握Python正则表达式的使用方法。
import re
result = re.match("^\d+-\d+-\d+$", "2015-03-20")
if result is not None: # or if result:
print "OK", result.group(0)
else:
print "FAIL"
result = re.match("^(\d+)-(\d+)-(\d+)$", "2015-03-20")
if result:
print "OK",
year = result.group(1)
month = result.group(2)
day = result.group(3)
print "year:", year, ", month:", month, ", day:", day
else:
print "FAIL"
假设我们要匹配的浮点数有这几种形式:123,123.456,.456。那么可以对应下面的示例代码:
import re
import sys
def usage():
print "ERROR! Usage: sys.argv[0], value"
def is_double(s_value):
result = re.match("^(\\d+\\.||\\.)?\\d+$", s_value)
if result:
return True
else:
return False
if __name__=="__main__":
argc = len(sys.argv)
if argc != 2:
usage()
sys.exit(-1)
s_value = sys.argv[1]
print "s_value:", s_value
result = is_double(s_value)
print result
C:\Python27>python e:\examples\python\is_double.py 5.6
s_value: 5.6
True
C:\Python27>python e:\examples\python\is_double.py 5
s_value: 5
True
C:\Python27>python e:\examples\python\is_double.py .43
s_value: .43
True
C:\Python27>python e:\examples\python\is_double.py a.3
s_value: a.3
False
C:\Python27>python e:\examples\python\is_double.py fda
s_value: fda
False
todo