发布时间:2019-09-10 09:18:46编辑:auto阅读(2171)
今天学习测试了一下Python中的正则表达式的模块用法。初学 Python ,对 Python 的文字处理能力有很深的印象,除了 str 对象自带的一些方法外,就是正则表达式这个强大的模块了。但是对于初学者来说,要用好这个功能还是有点难度,由于我记性不好,很容易就忘事,所以还是写下来比较好一些,同时也可以加深印象,整理思路。
由于我是初学,所以肯定会有些错误,还望高手不吝赐教,指出我的错误。
一、Python中转义字符
正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符,这里跟Python的语法冲突,因此,Python用" \\\\ "表示正则表达式中的" \ ",因为正则表达式中如果要匹配" \ ",需要用\来转义,变成" \\ ",而Python语法中又需要对字符串中每一个\进行转义,所以就变成了" \\\\ "。
上面的写法是不是觉得很麻烦,为了使正则表达式具有更好的可读性,Python特别设计了原始字符串(raw string),需要提醒你的是,在写文件路径的时候就不要使用raw string了,这里存在陷阱。raw string就是用'r'作为字符串的前缀,如 r"\n":表示两个字符"\"和"n",而不是换行符了。Python中写正则表达式时推荐使用这种形式。
二、正则表达式元字符说明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | . 匹配除换行符以外的任意字符^ 匹配字符串的开始$ 匹配字符串的结束[] 用来匹配一个指定的字符类别? 对于前一个字符字符重复0次到1次*对于前一个字符重复0次到无穷次{} 对于前一个字符重复m次{m,n} 对前一个字符重复为m到n次\d 匹配数字,相当于[0-9]\D 匹配任何非数字字符,相当于[^0-9]\s 匹配任意的空白符,相当于[ fv]\S 匹配任何非空白字符,相当于[^ fv]\w 匹配任何字母数字字符,相当于[a-zA-Z0-9_]\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]\b 匹配单词的开始或结束 |
三、导入正则表达式模块
3.1、导入正则表达式模块
1 | >>> importre |
3.2、查看正则表达式模块方法
1 2 3 | >>> dir(re)['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T','TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__','__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl','_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile','copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split','sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']>>> |
四、常用的正则表达式处理函数
4.1、re.search
re.search 函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
提示:当我们不会用模块方法的时候用help
1 2 | >>> help(re.search)search(pattern, string, flags=0) |
第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式
实例:下面的例子kuangl
1 2 3 4 5 6 7 8 | >>> name="Hello,My name is kuangl,nice to meet you...">>> k=re.search(r'k(uan)gl',name)>>> ifk:... printk.group(0),k.group(1)... else:... print"Sorry,not search!"...kuangl uan |
4.2、re.match
re.match 尝试从字符串的开始匹配一个模式,也等于说是匹配第一个单词
1 2 | >>> help(re.match)match(pattern, string, flags=0) |
第一个参数:规则
第二个参数:表示要匹配的字符串
第三个参数:标致位,用于控制正则表达式的匹配方式
实例:下面的例子匹配Hello单词
1 2 3 4 5 6 7 8 9 10 | >>> name="Hello,My name is kuangl,nice to meet you...">>> k=re.match(r"(\H....)",name)>>> ifk:... printk.group(0),'\n',k.group(1)... else:... print"Sorry,not match!"...HelloHello>>> |
re.match与re.search的区别:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
4.3、re.findall
re.findall 在目标字符串查找符合规则的字符串
1 2 | >>> help(re.findall)findall(pattern, string, flags=0) |
第一个参数:规则
第二个参数:目标字符串
但三个参数:后面还可以跟一个规则选择项
返回的结果是一个列表,建中存放的是符合规则的字符串,如果没有符合规则的字符串呗找到,就会返回一个空值。
实例:查找邮件账号
1 2 3 | >>> mail='<user01@mail.com> <user02@mail.com> user04@mail.com'#第3个故意没有尖括号>>> re.findall(r'(\w+@m....[a-z]{3})',mail)['user01@mail.com', 'user02@mail.com', 'user04@mail.com'] |
4.4、re.sub
re.sub 用于替换字符串的匹配项
1 2 | >>> help(re.sub)sub(pattern, repl, string, count=0) |
第一个参数:规则
第二个参数:替换后的字符串
第三个参数:字符串
第四个参数:替换个数。默认为0,表示每个匹配项都替换
实例:将空白处替换成-
1 2 3 4 5 6 | >>> test="Hi, nice to meet you where are you from?">>> re.sub(r'\s','-',test)'Hi,-nice-to-meet-you-where-are-you-from?'>>> re.sub(r'\s','-',test,5) #替换至第5个'Hi,-nice-to-meet-you-where are you from?'>>> |
4.5、re.split
re.split 用于来分割字符串
1 2 | >>> help(re.split)split(pattern, string, maxsplit=0) |
第一个参数:规则
第二个参数:字符串
第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割
实例:分割所有的字符串
1 2 3 4 5 6 | >>> test="Hi, nice to meet you where are you from?">>> re.split(r"\s+",test)['Hi,', 'nice', 'to', 'meet', 'you', 'where', 'are', 'you', 'from?']>>> re.split(r"\s+",test,3) #分割前三个['Hi,', 'nice', 'to', 'meet you where are you from?']>>> |
4.6、re.compile
re.compile 可以把正则表达式编译成一个正则对象
1 2 | >>> help(re.compile)compile(pattern, flags=0) |
第一个参数:规则
第二个参数:标志位
实例:
1 2 3 4 5 6 7 8 9 | >>> test="Hi, nice to meet you where are you from?">>> k=re.compile(r'\w*o\w*') #匹配带o的字符串>>> dir(k)['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split','sub', 'subn']>>> printk.findall(test) #显示所有包涵o的字符串['to', 'you', 'you', 'from']>>> printk.sub(lambdam: '['+m.group(0) +']',test) # 将字符串中含有o的单词用[]括起来Hi, nice [to] meet [you] where are [you] [from]?>>> |
五、用urllib2、re、os 模块下载文件的脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/usr/bin/env pythonimporturllib2importreimportosURL='http://p_w_picpath.baidu.com/channel/wallpaper'read=urllib2.urlopen(URL).read()pat =re.compile(r'src="http://.+?.js">')urls=re.findall(pat,read)fori inurls:url=i.replace('src="','').replace('">','')try:iread=urllib2.urlopen(url).read()name=os.path.basename(url)with open(name,'wb') as jsname:jsname.write(iread)except:printurl,"url error" |
上一篇: w3wp.exe报错
下一篇: X3650M3\X3550M3用外置US
51292
50743
41340
38151
32621
29520
28369
23242
23209
21532
1606°
2340°
1940°
1881°
2208°
1925°
2608°
4382°
4231°
3002°