Python初学者(五)
2016-09-04 18:03
239 查看
十四、正则表达式
1、正则表达式是用于处理字符串的功能强大的工具,但它并不是Python所独有的,许多编程语言都支持正则表达式,用法也都区别不大;
2、Python中的正则表达式在re模块中;
3、Python中的数量词默认是贪婪的,总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符(例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb";而如果使用非贪婪的数量词"ab*",将找到"a"。);
4、与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。
(本文正则表达式表格部分借鉴于http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html,若有错,欢迎指正)
下面介绍re模块中的几个常用方法:re.match,re.search,re.findall,re.sub,re.split
>>> result = re.search('(python)python(\d{1,3})', 'pythonpython22')
>>> result.groups() # groups方法是匹配pattern中括号里的格式,以元组的形式返回括号里匹配成功的字符串
('python', '22')
>>> result.group() # group是正常的匹配,返回匹配成功的字符串
'pythonpython22'
>>>
1、正则表达式是用于处理字符串的功能强大的工具,但它并不是Python所独有的,许多编程语言都支持正则表达式,用法也都区别不大;
2、Python中的正则表达式在re模块中;
3、Python中的数量词默认是贪婪的,总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符(例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb";而如果使用非贪婪的数量词"ab*",将找到"a"。);
4、与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。
(本文正则表达式表格部分借鉴于http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html,若有错,欢迎指正)
下面介绍re模块中的几个常用方法:re.match,re.search,re.findall,re.sub,re.split
>>> import re >>> pattern = re.compile('python') # compile将字符串当做正则表达式来编译 >>> result = pattern.search('hello python!') >>> result <_sre.SRE_Match object; span=(6, 12), match='python'> >>> result.group() 'python' >>> # match方法 >>> result = re.match('a', 'abc') # match是从字符串的开头开始匹配 >>> result <_sre.SRE_Match object; span=(0, 1), match='a'> >>> result.group() # 并不直接返回匹配成功的字符串,需要使用group()方法 'a' >>> result = re.match('a', 'dabc') >>> result >>> result.group() # 没有匹配成功 Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> result.group() AttributeError: 'NoneType' object has no attribute 'group' >>> # search方法 >>> result = re.search('python', 'abcpythondef') # 在字符串的全文中搜索匹配一次,同样也不会直接返回匹配成功的字符串 >>> result <_sre.SRE_Match object; span=(3, 9), match='python'> >>> result.group() 'python' >>> # findall方法 >>> result = re.findall('python', 'abc python def python ghi') >>> result ['python', 'python'] >>> # sub方法 >>> result = re.sub('c', 'z', 'click', 1) # 使用匹配成功的字符串替换成指定的字符串,参数依次为正则表达式,匹配成功后要去替换的字符串,原字符串,替换次数 >>> result # 返回替换后的字符串 'zlick' >>> # split方法 >>> result = re.split('a', '1a2a3a4guyuyun') # 将匹配成功的字符串用作字符串分隔符,返回分隔后的字符串列表 >>> result ['1', '2', '3', '4guyuyun'] >>> # group和groups方法的区别
>>> result = re.search('(python)python(\d{1,3})', 'pythonpython22')
>>> result.groups() # groups方法是匹配pattern中括号里的格式,以元组的形式返回括号里匹配成功的字符串
('python', '22')
>>> result.group() # group是正常的匹配,返回匹配成功的字符串
'pythonpython22'
>>>
相关文章推荐
- Python初学者报到
- python for 初学者
- 给Python初学者的一些技巧
- Python初学者需要注意的问题
- [python]初学者地址
- Python初学者的技巧总结
- Python初学者 常见问题:书籍推荐、资料、社区
- python小技巧(初学者适用)
- 一个脚本讲述python语言的基础规范,适合初学者
- 在线学习心法:来自Python初学者的三大困难
- 布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
- Python初学者入门
- 给Python初学者的一些技巧
- 极力推荐python初学者使用wingIDE
- 来自Python初学者的三大困难
- 写给Python初学者的心得体会总结,【090819】更新中......
- 布同 Python中文问题解决方法(总结了多位前人经验,初学者必看)
- python初学者常见错误
- [python]初学者地址
- [python]初学者地址