Python正则表达式(1)
admin
2023-07-31 01:48:13
0

正则表达式(regular expression)是一种用形式化语法描述的文本匹配模式。在需要处理大量文本处理的应用中有广泛的使用,我没使用的编辑器,IDE中的搜索常用正则表达式作为搜索模式。玩过*nix系统的都知道如sed,grep,awk这类的命令,他们是非常强大的文本处理工具。几乎所有的语言都有对正则表达式的支持,有的直接在语法中支持,有的使用扩展库的形式。python使用的就是扩展库re。

  • re.search(pattern,string,flag=0)
    搜索文本中的匹配的模式是最常用的.以模式和文本作为输入,如果有匹配则返回一个Match对象,反之返回None。
    每个Match对象包括相关的匹配信息:原字符串、正则表达式和匹配的文本在字符串中的位置。
import re  
pattern = \"this\"  
text = \"Does this text match the pattern?\"  
match = re.search(pattern, text)  # 返回一个Match对象  
print match.re.pattern  # 要匹配的正则表达式\"this\"
print match.string      # 匹配的文本\"Does this match the pattern?\"  
print match.start()     # 匹配的开始位置 5
print match.end()       # 匹配的结束位置 9
  • re.compile(pattern,flag=0)
    如果程序中频繁的使用到同一个正则表达式,每次使用的时候都写一遍正则表达式不仅不高效而且会大大增加出错的几率,re提供了compile函数将一个表达式字符串编译为一个RegexObject。
    模块级函数会维护已编译表达式的一个缓存,而这个缓存是的大小是有限制的。直接使用已经编译的表达式可以避免缓存查找的开销,并且在加载模块时就会预编译所有的表达式。
import re  
regex = re.compile(\"this\")  
text = \"Does this text match the pattern?\"  
match = regex.search(text)  
if match:  
    print \"match\"  
    match.group(0)    #返回匹配的字符串   
else:
    print \"not match\"  
  • re.findall(pattern, string, flag=0)
    使用search会返回匹配的单个实例,使用findall会返回所有匹配的不重叠的子串。
import re  
pattern = \'ab\'  
text = \'abbaaabbbbaaaaaa\'  
re.findall(pattern, text)   # 返回[\'ab\', \'ab\']  
  • re.finditer(pattern, string, flag=0)
    finditer会返回一个迭代器,会生成Match实例,不像findall()返回字符串.
import re  
pattern = \'ab\'  
text = \'abbaaabbbbaaaaaa\'  
match = re.finditer(pattern, text)   
for m in match:
    print m.start()  
    print m.end()

以上的例子会分别输出两次匹配结果的起始位置和结束位置。

正则匹配默认采用的是贪婪算法,也就是说会re在匹配的时候会利用尽可能多的输入,而使用?可以关闭这种贪心行为,只匹配最少的输入。这之前先说下量词。

量词是为了简化正则表达式的读写而定义的,通用的形式是{m,n},这表示匹配的个数至少是m,最多是n,在\’,\’之后不能有空格,否则会出错,并且均为闭区间。

{n} 之前的元素必须出现n次
{m,n} 之前元素最少出现m次,最多n次
{m,} 之前的元素最少出现m次,无上限
{0,n} 之前的元素可以不出现,也可以出现,出现的话最多出现n次

除了之上,还有三个常用的量词*,?和+

* 等价于{0,}
+ 等价于{1,}
\\? 等价于{0,1}

还有^和$,分别表示段或者字符串的开始与结束。

import re  
re.search(\"^travell?er$\", \"traveler\")    # True  
re.search(\"^travell?er$\", \"traveller\")   # True   
re.search(\"^ab\\*\", \"abbbbbbb\")           # True,返回\"abbbbbbb\" 
re.search(\"^ab\\*?\", \"abbbbbbb\")          # True,返回\"a\"  
re.search(\"^ab+\", \"abbbbbbb\")            # True,返回\"abbbbbbb\" 
re.search(\"^ab+?\", \"abbbbbbb\")           # True,返回\"ab\"  

相关内容

热门资讯

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