码迷,mamicode.com
首页 > 编程语言 > 详细

python模块之re

时间:2017-11-05 14:32:46      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:search   port   gif   python   img   语法   表达式   birt   dfs   

常用正则表达式符号

.     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
^     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE)
$     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE).group()也可以
*     匹配*号前的字符0次或多次,re.findall("ab*","cabb3abcbbac")  结果为[abb, ab, a]
+     匹配前一个字符1次或多次,re.findall("ab+","ab+cd+abb+bba") 结果[ab, abb]
?     匹配前一个字符1次或0次
{m}   匹配前一个字符m次
{n,m} 匹配前一个字符n到m次,re.findall("ab{1,3}","abb abc abbcbbb") 结果abb, ab, abb]
|     匹配|左或|右的字符,re.search("abc|ABC","ABCBabcCD").group() 结果ABC
(...) 分组匹配,re.search("(abc){2}a(123|456)c", "abcabca456c").group() 结果 abcabca456c
 
 
\A    只从字符开头匹配,re.search("\Aabc","alexabc") 是匹配不到的
\Z    匹配字符结尾,同$
\d    匹配数字0-9
\D    匹配非数字
\w    匹配[A-Za-z0-9]
\W    匹配非[A-Za-z0-9]
s     匹配空白字符、\t、\n、\r , re.search("\s+","ab\tc1\n3").group() 结果 \t
 
(?P<name>...) 分组匹配 re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city") 结果{province: 3714, city: 81, birthday: 1993}

最常用的匹配语法

1 re.match 从头开始匹配
2 re.search 匹配包含
3 re.findall 把所有匹配到的字符放到以列表中的元素返回
4 re.splitall 以匹配到的字符当做列表分隔符
5 re.sub      匹配字符并替换

反斜杠的困扰
与大多数编程语言相同,正则表达式里使用"\"作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"\",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\\"表示。同样,匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

仅需轻轻知道的几个匹配模式

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变^$的行为(参见上图)
S(DOTALL): 点任意匹配模式,改变.的行为
技术分享
 1 import re
 2 
 3 #s = ‘hello world‘
 4 # print(s.find(‘ll‘))
 5 # ret=s.replace(‘ll‘,‘xx‘)
 6 # print(ret)
 7 # print(s.split(‘w‘))
 8 # ret=re.findall("w\w{2}l", ‘hello world‘)
 9 # print(ret)
10 # ret=re.findall("alex", ‘hiudfgiusiohalexlkshd‘)
11 # print(ret)
12 # .通配符
13 # ret=re.findall("w..l", ‘hello world‘)# . 代指所有字符(换行符除外只能代指一个字符
14 # print(ret)
15 # ^尖角符
16 # ret=re.findall(‘^h..o‘,‘hjasdflhello‘)#只在开始位置匹配
17 # print(ret)
18 #$
19 # ret=re.findall(‘h..o$‘,‘hjasdflhello‘)#只在结尾位置匹配
20 # print(ret)
21 # * 重复匹配 范围[0,+oo]
22 # ret= re.findall(‘a.*li‘,‘husihfiosalexlihuidh‘)
23 # print(ret)
24 # + :[1,+oo]
25 # ret= re.findall(‘a.+li‘,‘husihfiosalexlihuidh‘)
26 # print(ret)
27 # ? [0,1]
28 # ret= re.findall(‘a.?li‘,‘husihfiosalexlihuidh‘)
29 # print(ret)
30 
31 # {} 自己定匹配几次 {1,3}匹配一到三次
32 # ret=re.findall(‘a{5}b‘,‘aaaaab‘)
33 # print(ret)
34 # *等于{0,正无穷}
35 # +等于{1,正无穷}
36 # ?等于{0,1}
37 
38 #字符集
39 
40 #[] 或关系[]中的内容选一,
41 # ret=re.findall(‘a[c,d]x‘,‘acx‘)
42 # print(ret)
43 #取消元字符的特殊功能(\  ^  -例外)
44 # ret=re.findall(‘a[c,*]x‘,‘a*x‘)
45 # print(ret)
46 # ^放在[]:取反
47 # ret=re.findall(‘[^4,5]‘,‘ysdgufi4x245df‘)
48 # print(ret)
49 # \  反斜杠后跟元字符去除特殊功能
50 #    反斜杠后跟普通字符实现特殊功能
51 # \d 匹配任何十进制数;相当于[0-9]
52 # \D 匹配任何非数字字符;相当于[^0-9]
53 # \s 匹配任何空白字符;相当于[\t\n\r\f\v]
54 # \S 匹配任何非空白字符;相当于[^\t\r\f\v]
55 # \w 匹配任何字母数字字符;相当于[a-zA-Z0-9]
56 # \W 匹配任何非字母数字字符;相当于[^a-zA-Z0-9]
57 # \b 匹配一个单词边界;也就是指单词和空格间的位置
58 # print(re.findall(‘\d{10}‘,‘9074892365982475896245692835‘))
59 # print(re.findall(‘\sasd‘,‘fak asd‘))
60 # print(re.findall(‘\w‘,‘fak asd‘))
61 # print(re.findall(r‘I\b‘,‘I am a LIST‘))
62 #匹配出第一个满足条件的结果
63 # ret=re.search(‘sb‘,‘shukdsbjfhsb‘)
64 # print(ret.group())
65 
66 # ret=re.findall(r"\\.","sdyfjD\\c")
67 # print(ret)
68 
69 # () | 分组
70 # ret=re.search(‘(as)+‘,‘sdfghjasas‘).group()
71 # print(ret)
72 # print(re.search(‘(as)|3‘,‘as‘).group())
73 
74 #正则表达式的方法
75 # 1 findall() 所有结果都返回
76 # 2 search()  返回匹配到的第一个对象,对象可调用group()
77 # 3 match()   只在字符串开始匹配,返回匹配到的第一个对象,对象可调用group()
78 # 4 split(‘[a,b]‘)  先以a分 分完之后以b分
79 # 5 sub()  三个参数 第一个为原内容 第二个是要替换内容 第三个为替换后的内容
80 # 6 compile()  创建一个正则表达式对象,加入规则。 obj=re.compile() obj.split()
View Code

 

python模块之re

标签:search   port   gif   python   img   语法   表达式   birt   dfs   

原文地址:http://www.cnblogs.com/leesen934/p/7787312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!