您的位置:首页 > 编程语言 > Python开发

python正则学习总结

2016-05-23 22:44 344 查看
暂时先写到这里,随使用逐步更新此文,希望我的总结能帮到你

Regular Expression Syntax

' . '
在默认模式下,匹配除换行符以外的任意字符。如果指定
DOTALL
标志,将匹配任何字符,包括换行符。

' ^ '
匹配字符串的起始,并且在
MULTILINE
模式下 也匹配多行的起始位置。

' $ '
匹配字符串的末尾,或者新的一行前字符的末尾。在 MULTLINE 模式下将匹配多行的末尾位置。
'foo'
匹配
'foo'
'foobar'
,然而正则表达式
'foo$'
仅匹配
' foo'
。更有趣的是,
search for 'foo.$'
'foo1\nfoo2\n'
自然匹配’foo2’,在
MULTILINE
模式下
'foo1'
会被匹配;在
'foo\b'
中寻找单一’$’将会返回两个 空(empty)匹配:一个在新的一行之前,一个在字符串的结尾。

' * '
使该符号前面的正则表达式匹配0次或多次,尽可能更多的匹配。’ab*’ 将会匹配 ‘a’,’ab’或者’a’跟随着任意数量的’b’

' + '
使得该符号前面的正则表达式匹配1次或多次,
'ab+'
将会匹配 ‘a’跟随着任意非零数量的’b’,不会仅仅匹配一个’a’

' ? '
使得该符号前面的正则表达式匹配1次或0次,
'ab?'
将会匹配 ‘a’或’ab’

*?, +? , ??
符号* ‘,’ + ‘,’ ? ‘是贪婪匹配,他们尽可能更多的匹配字符。有时我们不需要这样的性质,如果 RE <.**>匹配
<a> b <c>
,它将会匹配整个字符串,而不是
<a>
。在这几个符号后面加上?使他进行非贪婪模式匹配或者最小匹配,尽可能少的字符将会被匹配。使用RE
<.*?>
将会仅仅匹配
<a>


{m}
前面的正则表达式重复m次形成的表达式将会被匹配,少于正则次数的将不会被匹配,例如
a{6}
将会仅匹配 6 个 ‘a’字符,而不是5个’a’


4000
{m,n}
符合前面正则表达式重复m到n次形成的表达式将会被匹配,尽可能的匹配更多的前面的正则。这个表达式还有非贪婪的版本。例如
'aaaaaa' 'a{3,5}'
将会匹配5个’a’ ,但是
' a{3,5}? '
将会仅匹配3个’a’。
{m,n}
仅会使最近的正则表达式重复
m-n
次,例如
ab{m,n}
,只会使
b
重复m-n次,如果你希望重复的RE表达更长,可以将前面需要重复的部分加上括号
(ab){m,n}
,这样
ab
将重复m-n次。

' \ '
转译你希望匹配的特殊字符,例如你希望匹配 ’ * ’ , ’ ? ’ 等字符。

'[ ]'
使用这个指明一组字符集合

* 这以直接列出字符,例如
[amk]
将会匹配
' a ',' m ',' k '


* 在两个字符中添加
' - '
字符将两个字符分开,表明字符的范围。列如
[a-z]
将会匹配所有的小谢字母,
[0-5][0-9]
将会匹配所有的两位的数字从00到59,并且
[0-9A-Fa-f]
将会匹配任何16进制数

* 在集合中特殊字符失去了他们的特殊意义。例如:
[(+*)]
将匹配任何字符
' ( ' , ' + ' , ' * ' , ' ) '


* 在集合中字符类也被例如\w或者\s 也会被接受,尽管他们匹配的含义取决于
LOCALE
或者
UNICODE
模式被设置。

* 如果集合中地一个字符被设置为
' ^ '
所有不在集合中的字符将会被匹配。

NOTE:如果你需要匹配
[
或者
]
以及相似的在re表达式中有特殊含义的字符,匹配
[
可以使用
\
转义字符,当你需要匹配
]
时,不需要转义。

' | '
A|B
,A或者B可以是任意RE正则,这个正则将会匹配A或者B ,在 RE 表达式中匹配顺序按照从左到右。一旦冲共匹配则跳过右边的表达式。如果

*
'(...)'
* 匹配封闭括号中的正则表达式,并保存为分组。分组组的内容在匹配后可以被重新使用。

\number
引用编号为number分组中匹配到的字符串,分组号从1开始。

import re
pattern = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'
print re.sub(pattern,r'\2 \1',s)
###out###
say i, world hello!


\A
匹配字符串的起始位置

a = re.findall(r'\Athis' , 'this is a this string ,have lots of this')
a = re.findall('this' , 'this is a this string,have lots of this')
###out###
a = ['this']
a = ['this','this','this']


\Z
匹配字符串的结尾位置,例子参考上面’ \A ‘的示例

\b
匹配\w 和\W之间,官方的解释是(Match the empty string,but only at the beginning or end of a word)我觉得就是匹配 非\w

re.search(r'foo\b','foo')
re.search(r'foo\b','foo.')
re.search(r'foo\b','foo)')
re.search(r'foo\b','foo)))))')
###all match###


\B
与\b恰好相反

\d
当未设置
UNICODE
标志,匹配任意的十进制数,与
[0-9]
的效果相同,当
UNICODE
标志设置时,匹配
UNICODE
中的所有标记为数字的字符。

\D
\d
恰好相反

\s
当设置
UNICODE
标志,匹配任意的空白字符(whitespace character),与
[\t\n\r\f\v]
的效果相同。
LOCALE
标志不会扩展机器中的空白字符。当
UNICODE
标志设置时,匹配所有
UNICODE
字符集中的所有空白字符

\S
\s
恰好相反

\w
当设置
LOCALE
UNICODE
标志,匹配所有的字母数字以及下划线,与
[a-zA-Z0-9_]
效果相同

\W
\w
恰好相反

Module Contents

re.compile(pattern,flags=0)


编译正则表达式为正则表达式对象,可以在re.match()和re.search方法中使用。

prog = re.compile(pattern)

result = prog.match(string)


和这样的用法相同

result = re.match(pattern,string)


然而使用re.compile() 并且将结果保存在正则表达式对象中,当这个表达式在同一程序中被多次使用时效果更明显。

re.DEBUG


显示关于编译表达式的debug信息

**
re.I

re.IGNORECASE
**

执行不区分大小写匹配

**
re.M

re.MULTILINE
**

当被指定后,模式字符
' ^ '
匹配字符串的起始和每行的起始。模式字符
' $ '
匹配字符串的末尾和每行的末尾。

**
re.S

re.DOTALL
**

使
' . '
匹配任意字符,包括换行符

**
re.U

re.UNICODE
**

使\w,\W,\b,\B,\d,\D,\s,\S依赖于Unicode 字符属性库

re.search(pattern,string,flags = 0)


扫描整个字符串,寻找正则表达式第一个匹配的位置。把相应的
MathObject
实例返回.如果没有任何位置匹配返回
None
.

re.match(pattern,string,flags = 0)


如果 0 或者更多的字符在字符串的起始位置匹配正则表达式,返回一个相应的
MathObject
实例。如果没有匹配返回
None


NOTE:即使在
MULTILINE
模式下,
re.match
也只会匹配字符串的起始位置,而不是每一行的起始位置。

re.splite(pattern,string,maxsplit = 0 , flags = 0)


依照匹配模式拆分字符串,如果在模式匹配中使用捕获括号,在模式组中的所有文本也成为返回结果列表的一部分。如果设置maxsplit不为0,那么最多分割maxsplite次。

>>>re.split('\W+', 'Words, words, words.')


['Words', 'words', 'words', '']


>>> re.split('(\W+)', 'Words, words, words.')


['Words', ', ', 'words', ', ', 'words', '.', '']


>>> re.split('\W+', 'Words, words, words.', 1)


['Words', 'words, words.']


`>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)


['0', '3', '9']


re.findall(pattern,string,flags = 0)


返回字符串中的模式串的所有的非重叠匹配,返回一个字符列表。从左至右扫描字符串,匹配结果按照查找顺序返回。如果一个或者多个group在匹配模式中,返回一个group列表。如果匹配模式中包含超过一个group 将返回一个包含元组的列表

re.finditer(pattern,string,flags=0)


搜索string,返回一个顺序访问每一个匹配结果的迭代器,从左向右扫描字符串,按照匹配顺序返回匹配结果。

re.sub(pattern,repl,string,count = 0,flags = 0)


使用repl 替换string中每一个匹配的字符后,返回替换后的字符串。repl可以是一个字符传或者函数,当repl是一个字符串时,可以使用\id \g引用分组,但编号要从1起始。当repl是一个方法时,该方法接受一个(Match对象),返回用于替代的字符串。

re.subn(pattern,repl,string[,count])


与re.sub方法类似,不过可以通过设置count,设置替换次数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 正则