当前位置: 首页 » 产品 » 微商货源 » 正文

Python正则表达式经典入门

放大字体  缩小字体 发布日期: 2025-02-26 14:27   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:26
核心提示:正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般

正则表达式在平时做文本处理(爬虫程序去解析html中的字段,在分析log文件的时候需要抓取一些关键数据)的时候经常会用到。一般我们会使用到Python的re库。如果正则表达式自己代码中反复被用到的时候,我们可以将这个正则表达式使用re.compile函数转换成一个object方便调用。

match

将输入的字符串从第一个字符开始匹配,如果不匹配将会直接返回空。

search

和match不同,search能自由的在字符串中任一开始位置开始匹配,直到匹配上了。

re中的选项

通常在flag里面可以设置.

re.I 忽略掉大小写
re.L 让\w,\W,\b,\B,\s和\S做本地化识别
re.M 当匹配的时候支持多行匹配.
re.DEBUG 显示正则表达式的调试信息
re.S 让.号匹配本行的全部字符。

sub 替换

import re phone='188-88-88 # this is my phone number' num=re.sub(r'#.*$','',phone) # num==188-88-88 num=re.sub(r'\D','',phone) # num=1888888

还能使用这个来做代码的转义,有点像在 sublime text里面使用的查找替换。比如说我需要将C语言里面的宏定义转换成lua里面的变量定义

import re print( re.sub( r'#define\s+([a-zA-Z_]+)\s+([a-zA-Z_0-9]+)', r'_G.\1=\2', '#define MAX_RECV_SIZE 100' ) ) #_G.MAX_RECV_SIZE=100

subn函数类似,只是能定制替换的次数。

findall

将匹配到的内容返回成一个数组,这个应该是比较常用的方法。

print( re.findall( '\d+', '66,88,88,777' ) ) # ['66', '88', '88', '777']

finditer

匹配的内容以迭代器的方式返回,我们可以对这个做循环,返回的时候MatchObject

for num in re.finditer( '\d+', '66,88,88,777' ): print num.group() ''' 66 88 88 777 '''

split

re.split(pattern, string, maxsplit=0, flags=0) >>> re.split(',', 'Words, words, words.') ['Words', ' words', ' words.'] >>> re.split('\W+', 'Words, words, words.') ['Words', 'words', 'words', ''] >>> re.split('(\W+)', 'Words, words, words.') ['Words', ', ', 'words', ', ', 'words', '.', '']

大写的\W表示了非字串,这个在语法里面可以查到。如果加了括号,将不会省略掉匹配到的split的字串。最后这个在数组中作为字串分隔符的,.都被保留在数组中了。

escape

这个函数是一个辅助函数,当大量编写正则表达式的时候,可能我们固定的一些字串中包含了正则的保留字串,但是我们不需要让程序当它是re表达式的时候,可以使用这个函数将字串做转换。

re.escape('1234@gmail.com') # result 1234\\@gmai\\.com

备注语法:

模式 描述
^   匹配字符串的开头  
$   匹配字符串的末尾。  
.   匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。  
[…]   用来表示一组字符,单独列出:[amk] 匹配 ‘a','m'或'k'  
[^…]   不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。  
re*   匹配0个或多个的表达式。  
re+   匹配1个或多个的表达式。  
re?   匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式re{ n}  
re{ n,}   精确匹配n个前面表达式。  
re{ n, m}   匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式a  
(re)   G匹配括号内的表达式,也表示一个组  
(?imx)   正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。  
(?-imx)   正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。  
(?: re)   类似 (…), 但是不表示一个组  
(?imx: re)   在括号中使用i, m, 或 x 可选标志  
(?-imx: re)   在括号中不使用i, m, 或 x 可选标志  
(?#…)   注释.  
(?=re)   前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。  
(?! re)   前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功  
(?> re)   匹配的独立模式,省去回溯。  
\w   匹配字母数字  
\W   匹配非字母数字  
\s   匹配任意空白字符,等价于 [ \r\f].  
\S   匹配任意非空字符  
\d   匹配任意数字,等价于 [0-9].  
\D   匹配任意非数字  
\A   匹配字符串开始  
\Z   匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c  
\z   匹配字符串结束  
\G   匹配最后匹配完成的位置。  
\b   匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b' 可以匹配”never” 中的 ‘er',但不能匹配 “verb” 中的 ‘er'。  
\B   匹配非单词边界。'er\B' 能匹配 “verb” 中的 ‘er',但不能匹配 “never” 中的 ‘er'。  
, , 等.   匹配一个换行符。匹配一个制表符。等  
\1…\9   匹配第n个分组的子表达式。  
\10   匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。  

内容来源:https://www.16jixie.com/news/show-3574.html
 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站