Python正则
admin
2023-07-30 20:47:08
0
暂时先写到这里,随使用逐步更新此文,希望我的总结能帮到你

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 <.*>匹配 b ,它将会匹配整个字符串,而不是。在这几个符号后面加上?使他进行非贪婪模式匹配或者最小匹配,尽可能少的字符将会被匹配。使用RE <.*?>将会仅仅匹配

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

{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 当设置LOCALEUNICODE标志,匹配所有的字母数字以及下划线,与[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,设置替换次数。

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...