CMS程序网 加入收藏  -  设为首页
您的位置:CMS程序网 > 知识库 > 正文
正则表达式
正则表达式
提示:

正则表达式

本文主要内容:

正则表达式的概念,

语法,

常用正则表达式和python中的re库

正则表达式是用来简洁表达一组字符串的表达式,正则表达式是一种通用的字符串表达框架,正则表达式是具有某一类特征的一组字符串

'PY'

'PYY'                 ------>正则表达式:PY+

'PYYY...'

在文本处理中的应用:

>查找或替换一组字符串

>匹配字符串的部分或全部

正则表达式的语法

正则表达式由字符和操作符构成

操作符

常用的正则表达式匹配:

^[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}:匹配国内电话号码010-68697314

python中Re库

Re库是Python中的标准库,主要用于字符串匹配。

调用:import re

raw string类型:原生字符串类型,不包含对转移字符串再次转移的字符串

例如:r'[1-9]\d{5}'  ---->    操作符\d的斜杠为转义字符,不用原生字符串类型应该表示为\\d

re.search(pattern,string,flag=0):在字符串中搜索匹配正则表达式的第一个位置

pattern:正则表达式的字符串或原生字符串表示

string:待匹配字符串

flag:正则表达式使用时的控制标记

输出:432808

re.match(pattern,string,flag=0):从字符串的开始位置匹配,返回Match对象,参数同search()函数

输出:432808

re.findall(pattern,string,flag=0):搜索字符串返回所有能匹配的字符串,返回list,参数同search()函数

输出:['432808', '432800']

re.split(pattern,string,maxsplit=0,flag=0):搜索字符串返回所有能匹配的字符串,返回list,比search()函数多一个参数

maxsplit:最大分割数,剩余部分作为最后一个字符串

输出:['BOSTCODE_ONE:', ' ,BOSTCODE_TWO:', '']

['BOSTCODE_ONE:', ' ,BOSTCODE_TWO:432800']

re.finditer(pattern,string,flag=0):搜索字符串返回匹配结果的迭代类型,每一个元素是一个Match对象,

输出:



432808

432800

re.sub(pattern,repl,string,count=0,flag=0):搜索字符串返回匹配结果的迭代类型,每一个元素是一个Match对象,比search()函数多了两个参数

repl:替换匹配的字符串

count:匹配字符串的最大替换次数

输出:'BOSTCODE_ONE:12306 ,BOSTCODE_TWO:432800'

Re库的等价用法:

上面的用法为函数式用法:一次性操作,每次调用函数系统内部会将正则表达式字符串编译成正则表达式对象

等价用法为面向对象法:先编译正则表达式,然后用正则表达式对象来调用函数,可以多次使用,当匹配规则在多个地方使用先编译可以提高程序性能

输出:'BOSTCODE_ONE:12306 ,BOSTCODE_TWO:432800'

Re的Match对象

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

Match对象的属性

Match对象的方法

匹配模式

贪婪匹配:同时匹配长短不同的多项,返回长度最长的,Python默认采用这种模式

输出:'PYANBNCNDN'

最小匹配:在相应的操作符后面加?变为最小匹配模式

输出:'PYAN'

常用的最小匹配操作符

正则表达式
提示:

正则表达式

一、基本语法

    1.    \d  任意数字

            \w  任意字母数字下划线

            \s    空格,制表符,换行符等字符

            .      除了换行符任意一个字符




    2.    [ab5@] 表示匹配里面的任意一个字符

            [^a]除a外的任意一个字符

            [f-k]匹配f到k的任意一个字符

        补充:特殊符号被包含在中括号中失去意义,只代表符号本身,^-除外;

        标准字符集合除小数点外被包含在中括号中,自定义字符集包含该集合。

        如[\d.-+]  匹配:数字小数点+-。

二、量词

             \d{6}  匹配6个数字

             {n,m}最少重复n次最多m次

            默认贪婪模式即匹配的越多越好,加?非贪婪模式

            \d{6}?

            \d{6,}最少6次

            ?匹配0次或1次,相当于{0,1}

            +  表达式至少出现一次,相当于{1,}

            *  出现任意次,相当于{0,}

三、字符边界,零宽度

            ^表示字符开始的位置

            ^i    匹配字符串开头第一个字符位置

            $  字符串结束的位置

            \b    不全是\w

            \A\Z分别表示文本开头和结尾

四、分支结构、捕获组、非捕获组

            分支结构      |        或

            捕获组      ()  捕获所匹配的字符,后面跟/1、/2来取匹配的字符

            非捕获组(?:)不捕获括号内匹配的字符,有利于减小内存开支。

五、零宽断言

          (?=表达式)  表示后面匹配的表达式,但不包括匹配的字符串

          (?<=表达式)  断言自身前面出现的表达式

          (?!表达式)自身后面不能出现的表达式

          (?<!表达式)断言此位置前面不能匹配的表达式

正则表达式 "^+$"是什么意思
提示:

正则表达式 "^+$"是什么意思

^+$分别表示: 1、^:匹配输入字符串的开始位置。 2、+:匹配前面的子表达式一次或多次(大于等于1次)。 3、$:匹配输入字符串的结束位置。 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成"regex",单数有regexp、regex,复数有regexps、regexes、regexen。 正则表达式由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。 在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式“testing”中没有包含任何元字符,它可以匹配“testing”和“testing123”等字符串,但是不能匹配“Testing”。 要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。

正则表达式 "^+$"是什么意思
提示:

正则表达式 "^+$"是什么意思

字符/
意义:对于字符,通常表示按字面意义,指出接着的字符为特殊字符,不作解释.
例如:/b/匹配字符’b’,通过在b 前面加一个反斜杠,也就是/b/,则该字符变成特殊字符,表示
匹配一个单词的分界线.
或者:
对于几个字符,通常说明是特殊的,指出紧接着的字符不是特殊的,而应该按字面解释.
例如:*是一个特殊字符,匹配任意个字符(包括0个字符);例如:/a*/意味匹配0个或多个a.为了匹配字面上的*,在a前面加一个反斜杠;例如:/a*/匹配’a*’.
字符^
意义:表示匹配的字符必须在最前边.
例如:/^A/不匹配"an A,"中的’A’,但匹配"An A."中最前面的’A’.
字符$
意义:与^类似,匹配最末的字符.
例如:/t$/不匹配"eater"中的’t’,但匹配"eat"中的’t’.
字符*
意义:匹配*前面的字符0次或n次.
例如:/bo*/匹配"A ghost booooed"中的’boooo’或"A bird warbled"中的’b’,但不匹配"Agoat g
runted"中的任何字符.
字符+
意义:匹配+号前面的字符1次或n次.等价于{1,}.
例如:/a+/匹配"candy"中的’a’和"caaaaaaandy."中的所有’a’.
字符?
意义:匹配?前面的字符0次或1次.
例如:/e?le?/匹配"angel"中的’el’和"angle."中的’le’.
字符.
意义:(小数点)匹配除换行符外的所有单个的字符.
例如:/.n/匹配"nay, an apple is on the tree"中的’an’和’on’,但不匹配’nay’.
字符(x)
意义:匹配’x’并记录匹配的值.
例如:/(foo)/匹配和记录"foo bar."中的’foo’.匹配子串能被结果数组中的素[1], ...,[n] 返
回,或被RegExp对象的属性, ..., 返回.
字符x│y
意义:匹配’x’或者’y’.
例如:/green│red/匹配"green apple"中的’green’和"red apple."中的’red’.
字符{ n }
意义:这里的n是一个正整数.匹配前面的n个字符.
例如:/a{ 2 }/不匹配"candy,"中的’a’,但匹配"caandy," 中的所有’a’和"caaandy."中前面的两个’a’.
字符{ n, }

正则表达式
提示:

正则表达式

一、校验数字的表达式

1,数字:

^[0-9]*$

2,n 位的数字:

^d{n}$

3,至少 n 位的数字:

^d{n,}$

4,m-n 位的数字:

^d{m,n}$

5,零和非零开头的数字:

^(0|[1-9][0-9]*)$

6,非零开头的最多带两位小数的数字:

^([1-9][0-9]*)+(.[0-9]{1,2})?$

7,带1-2位小数的正数或负数:

^(-)?d+(.d{1,2})?$

8,正数、负数、和小数:

^(-|+)?d+(.d+)?$

9,有两位小数的正实数:

^[0-9]+(.[0-9]{2})?$

10,有1~3位小数的正实数:

^[0-9]+(.[0-9]{1,3})?$

11,非零的正整数:

^[1-9]d$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]*$

12,非零的负整数:

^-[1-9][]0-9"$ 或 ^-[1-9]d$

13,非负整数:

^d+$ 或 ^[1-9]d*|0$

14,非正整数:

^-[1-9]d*|0$ 或 ^((-d+)|(0+))$

15,非负浮点数:

^d+(.d+)?$ 或

^[1-9]d.d|0.d[1-9]d|0?.0+|0$

16,非正浮点数:

^((-d+(.d+)?)|(0+(.0+)?))$ 或

^(-([1-9]d.d|0.d[1-9]d))|0?.0+|0$

17,正浮点数:

^[1-9]d.d|0.d[1-9]d$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$

18,负浮点数:

^-([1-9]d.d|0.d[1-9]d)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$

19,浮点数:

^(-?d+)(.d+)?$ 或

^-?([1-9]d.d|0.d[1-9]d|0?.0+|0)$

二、校验字符的表达式

1, 汉字:

^[一-龥]{0,}$

2, 英文和数字:

^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$

3, 长度为3-20的所有字符:

^.{3,20}$

4, 由26个英文字母组成的字符串:

^[A-Za-z]+$

5, 由26个大写英文字母组成的字符串:

^[A-Z]+$

6, 由26个小写英文字母组成的字符串:

^[a-z]+$

7, 由数字和26个英文字母组成的字符串:

^[A-Za-z0-9]+$

8, 由数字、26个英文字母或者下划线组成的字符串:

^w+$ 或 ^w{1,20}$

9, 中文、英文、数字包括下划线:

^[一-龥A-Za-z0-9_]+$

10, 中文、英文、数字但不包括下划线等符号:

^[一-龥A-Za-z0-9]+$ 或 ^[一-龥A-Za-z0-9]{2,20}$

11, 可以输入含有^%&’,;=?$”等字符:

[^%&',;=?$"]+

12, 禁止输入含有~的字符:

[^~"]+

13, 不以xxx(如 jeffjade )开头(/结尾)的字符串

^(?!jeffjade).*$

^.*?(?<!jeffjade)$

三,特殊需求表达式

1, Email地址:

^([a-z0-9_.-]+)@([\da-z.-]+).([a-z.]{2,6})$ 或

w[-w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}

2, 域名地址:

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

3, 手机号码:

^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$

4, 身份证号(15位、18位数字):

^d{15}|d{18}$

正则表达式
提示:

正则表达式

匹配所有符合规律的内容,并且返回的是一个列表 匹配第一个符合规律的内容,返回一个正则对象 替换符合规律的内容,并返回 可以得到dnot是一个占位的符号 *表答的是前面的元素出现0次或者多次所以 ?是匹配前面的字符一次或者0次 可以控制匹配h的数量 举个例子: 匹配的是1后面占位的3个符号 可以看出re.S将"."的匹配范围扩大到了换行符。原来的"."号是没有换行符的 search的group(1)表示的是第一个括号里的内容 如果有多个括号贼为多个括号里的内容 可以看出来a为一个list而如果每一个list的元素中有多个"()"则每一个list的元素为 一个tuple sub 返回的是一个字符串,并且是将原文匹配的所有改变之后的字符串 sub是将匹配的部分改变并且拼接起来 由于. 是贪婪匹配所以匹配的是整体字符串123aaa123123xxx123 替换成hello 而. ?是非贪婪所以匹配出两个并且拼接hellohello