正则表达式库的使用

正则表达式的概念Regular Expression RE

优势:简洁 一行胜千言

用于对字符串的匹配

在文本处理中十分常用

表达文本类型的特征(病毒,入侵检测)

同时查找或替换一组字符串

匹配字符串的局部和全部

正则表达式的使用

首先将符合正则表达式语法的字符串转化成正则表达式 特征

p = re.compile(regx)

操作符 说明 实例
. 表示任何单个字符
[ ] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a-z]表示所有的小写字母
[^] [^abc]表示非a或b或c的单个字符
* 前一个字符0次或无限次扩展 abc*表示ab,abc,abcc,abccc等
+ 前一个字符1次或无限次扩展 abc+表示abc,abcc,abccc等
? 前一个字符0次或1次扩展 abc?表示ab,abc
| 左右表达式任意一个 abc|def表示abc或def
{m} 扩展前一个字符m次 ab{2}c表示abbc
{m,n} 扩展前一个字符m至n次(含n) ab{1,2}c表示abc,abbc
^ 匹配字符串开头 ^abc表示abc在一个字符串的开头
$ 匹配字符串结尾 abc$表示abc在一个字符串的结尾
() 分组标识,内部只能使用|操作符 (abc)表示abc,(abc|def)表示abc,def
\d 数字,等价于[0-9]
\w 单词字符等价于[A-Za-z0-9_]
^[A-Za-z]+$ 由26个字母组成的字符串
^[A-Za-z0-9]+$ 由26个字母和数字组成的字符串
^-?\d+$ 数据形式的字符串
^[0-9]*[1-9][0-9]*$ 正整数形式的字符串
[1-9]\d{5} 中国境内的邮政编码
[\u4e00-\u9fa5] 匹配中文字符
\d{3}-\d{8}|\d{4}-\d{7} 国内电话号码
(([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]).){3}([1-9]?\d|1\d{2}|2[0-4]\d|25[0-5]) IP地址

Re库是python的标准库

import re

re库采用raw string类型表示正则表达式,表示为

r‘text‘

如: r‘[1-9]\d{5}‘

r‘\d{3}-\d{8}|\d{4}-\d{7}‘

raw string是不包括对转义字符再次转义的字符串,建议使用raw string

Re库的主要功能函数

函数 说明
re.search(pattern,string,flags=0) 在一个字符串中匹配正则表达式的第一个位置,返回match对象
re.match(pattern,string,flags=0) 从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall(pattern,string,flags=0) 搜索字符串,以列表类型返回全部能匹配的子串
re.split(pattern,string,maxsplit=0,flags=0) 将一个字符串按照正则表达式匹配结果进行侵害,返回列表类型, maxsplit表示最大分割数,剩余部分作为最后一个元素输出
re.finditer(pattern,string,flags=0) 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
re.sub(pattern,repl,string,count=0,flags = 0) 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串,repl为替换匹配字符串的字符串,count为最大替换次数
re.compile(pattern,flags = 0) 将正则表达式的字符串形式编译所正则表达式对象
flags 说明
re.I re.IGONRECASE 忽略正则表达式的大小写,[A-Z]能匹配小写字符
re.M re.MULTILINE 正则表达式的中的^操作符能够将给定字符串的每行当作匹配开始位置
re.S re.DOTALL 正则表达式的中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符

re库的另一种等价用法

函数式用法,一次性操作

rst = re.search(r‘[1-9]\d{5}‘,‘BIT 10081‘)

面向对象用法,编译后多次操作

pat = re.compile(r‘[1-9]\d{5}‘)

rst = pat.search(‘BIT 10081‘)

Match对象 是一次匹配的结果,包含匹配的很多信息

Match对象的属性

属性 说明
.string 待匹配的文本
.re 匹配进使用pattern对象(正则表达式)
.pos 正则表达式搜索文本的开始位置
.endpos 正则表达式搜索文本的结束位置
方法 说明
.group(0) 获得匹配的字符串
.start() 匹配字符串在原始字符串的开始位置
.end() 匹配字符串在原始字符串的结束位置
.span() 返回(.start(),.end())

Re库的贪婪匹配和最小匹配

贪婪匹配:re库默认采用贪婪匹配,即输出匹配最长的子串

如:



 最小匹配:如何输出最短的子串

操作符 说明
*? 前一个字符0次或无限次扩展,最小匹配
+? 前一个字符1次或无限次扩展,最小匹配
?? 前一个字符0次或1次扩展,最小匹配
{m,n}? 前一个字符m至n次(含n),最小匹配

只要长度输出可能不同,都可以通过在操作符后增加?变成最小匹配

null

时间: 2024-10-18 06:28:57

正则表达式库的使用的相关文章

C++11 正则表达式库 (regex)

Source: http://cpprocks.com/wp-content/uploads/c++11-regex-cheatsheet.pdf C++11 正则表达式库 (regex),布布扣,bubuko.com

ATL正则表达式库与CAtlRegExp的使用

正则表达式是最强大的文本解析工具之一, 在ATL中也提供了一些用于正则表达式的类库(CATLRegExp等),本文将简要说明这些类库的使用方法. 1.CATLRegExp类 声明: template <class CharTraits=CAtlRECharTraits> class CAtlRegExp; 初始化: 与微软的GRETA类库(微软研究院推出的另一个正则表达式类库)不同,CATLRegExp并没有在构造函数中提供初始化匹配字符串的方法,而是让使用者通过调用它的Parse()方法,使

【regex】POSIX标准正则表达式库

在linux C 下面没有编译成功使用?号的非贪婪模式. 网上的一句话:the ? only works for Perl-based regexp, not for POSIX... 如果需要使用非贪婪模式匹配,可以使用boost的正则表达式库

[C/C++11]_[初级]_[使用正则表达式库regex]

场景 正则表达式在处理非常量字符串查找,替换时能很省事,如果稍微复杂点的字符串匹配, 没有正则表达式还真做不出来. C++11 为我们提供了正则表达式库. 使用起来比boost的正则库方便. 搞Java 的一定觉得很搞笑,这都是Java的标配功能, 怎么C++11才支持这个库,vs2010 以才支持.建议在处理字符串搜索替换时,直接用正则吧,代码量少,快速. 参考 std::regex_replace std::regex_iterator Regular Expressions (C++) 说

编译 pcre - 开源的正则表达式(库)

PCRE百科介绍: PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库.这些在执行正规表达式模式匹配时用与Perl 5同样的语法和语义是很有用的.Boost太庞大了,使用boost regex后,程序的编译速度明显变慢.测试了一下,同样一个程序,使用boost::regex编译时需要3秒,而使用pcre不到1秒.因此改用pcre来解决C语言中使用正则表达式的问题 pcre库官网:http://www.pcre.o

深入浅出C/C++中的正则表达式库

写在前面: 本文是面向有正则表达式基础的读者朋友的,如果你还不知道正则表达式是什么,请先到这里学习一下  :http://en.wikipedia.org/wiki/Regular_expression. 正则表达式(Regular Expressions),又被称为regex或regexp,是一种十分简便.灵活的文本处理工具.它可以用来精确地找出某文本中匹配某种指定规则的内容.在Linux下,grep, sed, awk等工具都支持正则表达式,这些工具的存在,为我们日常的文本处理带来了极大的便

在C++ Builder6上使用Boost正则表达式库

本文关键词:正则表达式 c++ python 软件 正则表达式是一种模式匹配形式,它通常用在处理的文本程序中.比如我们经常使用的grep工具,还是perl语言都使用了正则表达式. 正则表达式是一种模式匹配形式,它通常用在处理的文本程序中.比如我们经常使用的grep工具,还是perl语言都使用了正则表达式.传统的C++处理正则表达式是非常麻烦的,这也成为很多其他语言爱好者的笑柄,现在情况不一样了,因为有了boost. Boost是一个基于Template的开发源代码库,在这个库中有很多子库用来高效

关于pcre正则表达式库libpcre

gcc 4.8中已经包含了std regex的头文件 可是没有实现,所以链接是失败的 gcc 4.9完整的支持了c++ 11的regex. 在4.9以前,可以寻求boost的regex. 不过,我更熟悉pcre,基于perl的正则表达式的实现. 下载源码,解压 将库配置为交叉编译,只生成静态库,配置pcre代码如下: #!/bin/sh export ROOTDIR="${PWD}" cd pcre-8.36/ export CROSS_COMPILE="arm-linux-

06 Python爬虫之Re(正则表达式)库

目录 一.正则表达式的语法 1.1 正则表达式的常用操作符 实例: 二.Re库的基本使用 2.1 Re库介绍 2.2 Re库主要功能函数 re.search(pattern,string,flags=0) re.match(pattern,string,flags=0) re.findall(pattern,string,flags=0) re.split(pattern,string,maxsplit=0,flags=0) re.finditer(pattern,string,flags=0)