3.2.1 正则表达式的语法(3)

(?(id/name)yes-pattern|no-pattern)

先判断id或name是否存在,如果存在就使用yes-pattern规则来匹配;如果不存在,就使用no-pattern匹配。并且no-pattern是可选的,可以不存在。

例子:

print(‘(<)?(\[email protected]\w+(?:\.\w+)+)(?(1)>|$)‘)

m = re.findall(u‘(<)?(\[email protected]\w+(?:\.\w+)+)(?(1)>|$)‘,

u‘<[email protected] <[email protected]> [email protected]> [email protected]‘)

if m:

print(m)

结果输出如下:

(<)?(\[email protected]\w+(?:\.\w+)+)(?(1)>|$)

[(‘<‘, ‘[email protected]‘), (‘‘, ‘[email protected]‘)]

下面来介绍转义字符,主要由‘\’和特定字符组成。如果指定的字符不在下面的列表里,re判断就会跳过‘\’,直接使用第二个字符作为判断。例如:\$在下面的字符里找不到,就以$来使用。

\number

匹配与数字序号相同的组,组的序号从1开始。例如(.+) \1就会匹配‘the the’或者‘55 55’,但不会匹配‘thethe’模式,因为(.+)与\1之间有一个空格,\1就是表示与(.+)相同匹配的组。这种方式只能匹配1到99组号,如果超过99就认为是八进制数,同时零开头的数字也认为是八进制数字。注意的是在方括号[]内的任何数字,包括转义字符都认为普通的字符处理。

例子如下:

print(r‘(.+) \1‘)

m = re.findall(r‘(.+) \1‘, r‘abc abc abcabc 55 56 57 57‘)

if m:

print(m)

输出结果如下:

(.+) \1

[‘abc‘, ‘5‘, ‘57‘]

在这个例子里要注意的是正则表达式规则字符要使用r开头的原始字符串,或者采用双\\来表示数字,否则\1又表示别的字符了。

\A

表示仅从字符串的开始位置进行匹配。

例子如下:

print(‘\\Aabc‘)

m = re.findall(u‘\Aabc‘, u‘abc Aabc‘)

if m:

print(m)

m = re.findall(u‘abc‘, u‘abc Aabc‘)

if m:

print(m)

输出结果如下:

\Aabc

[‘abc‘]

[‘abc‘, ‘abc‘]

从这里可以看到采用\A之后,只匹配一个,而没有这个标志就会匹配任何地方的abc。

\b

在一个单词之前或之后匹配空字符串。单词定义的字符范围是UNICODE的ASCII或者下划线,空字符串定义为空格、非ASCII和非下划线字符。例如r’\bcai\b’表示‘cai’,‘cai.’,‘(cai)’等匹配,而不匹配‘caimouse’,‘cai8’。

例子:

print(r‘\b‘)

m = re.findall(r‘\bcai\b‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\b

[‘cai‘]

\B

在单词的开头或结尾匹配一个非空串。例如r’cai\B’表示匹配‘caimouse’,‘cai8’,‘cai_’,但不会匹配‘cai’,‘cai.’,‘cai!’。从这个意义来说与\b是刚好相反的。

例子:

print(r‘\B‘)

m = re.findall(r‘cai\B‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\B

[‘cai‘, ‘cai‘]

\d

在UNICODE模式之下:

匹配任何UNICODE的数字(在UNICODE里等同于[Nd])。包括[0-9],以及其它数字字符。如果设置ASCII标志,就仅限于[0-9],如果是这样,直接使用[0-9]的方式会更好。

在8位模式之下:

匹配任何数字字符,等同于[0-9]。

例子:

print(r‘\d‘)

m = re.findall(r‘cai\d‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\d

[‘cai8‘]

\D

匹配任何非数字字符之外的字符,与\d的集合刚好相反。如果使用ASCII标志,与[^0-9]是相同的集合。不过使用ASCII标志之后,会影响整个正则表达式。如果只是想限制[^0-9]集合,直接使用这个会更好。

例子:

print(r‘\D‘)

m = re.findall(r‘cai\D‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\D

[‘caim‘, ‘cai ‘]

\s

在UNICODE模式之下:

匹配UNICODE分隔字符,包括空格、\t\n\r\f\v等等。

在8位模式之下:

匹配空格字符,同时也包括[\t\n\r\f\v]。

例子:

print(r‘\s‘)

m = re.findall(r‘cai\s‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\s

[‘cai ‘]

\S

匹配任何非空格字符。与\s意义刚好相反。

例子:

print(r‘\S‘)

m = re.findall(r‘cai\S‘, r‘caimouse cai cai8‘)

if m:

print(m)

输出结果如下:

\S

[‘caim‘, ‘cai8‘]

\w

匹配任何非特定意义的字符。在8位的模式之下,就是与集合[a-zA-Z0-9]相同。

例子:

print(r‘\w‘)

m = re.findall(r‘cai\w‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\w

[‘caim‘, ‘cai8‘]

\W

匹配任何不组成词的字符。在8位模式之下,与[^a-zA-Z0-9]集合相同。

例子:

print(r‘\W‘)

m = re.findall(r‘cai\W‘, r‘caimouse cai cai8‘)

if m:

print(m)

结果输出如下:

\W

[‘cai ‘]

\Z

只在字符结尾进行匹配。

例子:

print(r‘\Z‘)

m = re.findall(r‘cai\Z‘, r‘caimouse\ncai‘)

if m:

print(m)

输出结果如下:

\Z

[‘cai‘]

蔡军生  QQ:9073204 深圳

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 15:31:54

3.2.1 正则表达式的语法(3)的相关文章

正则表达式基本语法应用详解

1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以"of despair"结尾的字符串: "^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有&qu

前端学PHP之正则表达式基础语法

前面的话 正则表达式是用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分割.匹配.查找及替换操作.在PHP中,正则表达式一般是由正规字符和一些特殊字符(类似于通配符)联合构成的一个文本模式的程序性描述.正则表达式有三个作用:1.匹配,也常常用于从字符串中析取信息:2.用新文本代替匹配文本:3.将一个字符串拆分为一组更小的信息块.本文将详细介绍PHP中的正则表达式基础语法 [注意]关于javascript的正则表达式的详细信息移步至此 历史 在PHP中有两套正则表达式函数库,两者功

正则表达式的语法规则

正则表达式描述了一种字符串匹配的模式,通过这个模式在特定的函数中对字符串进行匹配.查找.替换及分割等操作.正则表达式作为一个匹配的模板,是由原子(普通字符,例如字符a到z).有特殊功能的字符(称为元字符,例如*.+和?等),以及模式修正符三部分组成的文字模式.一个最简单的正则表达式模式中,至少也要包含一个原子,如“/a/”.而且在与Perl兼容的正则表达式函数中使用的模式时,一定要给模式加上定界符,即将模式包含在两个反斜线“/”之间.一个HTML连接的正则表达式模式如下所示: ‘/<a.*?(?

正则表达式基本语法

1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等):"of despair$":表示所以以"of despair"结尾的字符串:"^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"

Java正则表达式之语法规则

[转]Java正则表达式之语法规则 正则表达式是一种强大而灵活的文本处理工具,使用正则表达式能够以编程的方式,构造复杂的文本模式,并对输入的字符串进行搜索.一旦找到了匹配这些模式的部分,就能够随心所欲地它们进行处理.正则表达式提供了一种完全通用的方式,能够解决各种字符串处理相关的问题:匹配.选择.编辑以及验证. 首先看一下JAVA中正则表达式的完整构造集,也可以参考java.util.regex.Pattern中的API说明. 字符 X 字符X \\ 反斜线字符 \0n 带有八进制值0的字符n(

(转)Java正则表达式的语法与示例

转自:http://www.cnblogs.com/lzq198754/p/5780340.html 概要: Java正则表达式的语法与示例 | |目录 1匹配验证-验证Email是否正确 2在字符串中查询字符或者字符串 3常用正则表达式 4正则表达式语法 1匹配验证-验证Email是否正确 Java | 复制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 public static void main(String[] args) {     // 要验证的字符串     

(基础篇)正则表达式的语法汇总与详细介绍

用好正则表达式往往会起到事半功倍的效果,以下是对PHP正则表达式的语法汇总和详细介绍. 首先,让我们看看两个特别的字符:'^' 和 '$' 他们是分别用来匹配字符串的开始和结束,一下分别举例说明 "^The": 匹配以 "The"开头的字符串; "of despair$": 匹配以 "of despair" 结尾的字符串; "^abc$": 匹配以abc开头和以abc结尾的字符串,实际上是只有abc与之匹配

JS正则表达式基本语法

1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束. 例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以"of despair"结尾的字符串: "^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有&q

js正则表达式基本语法(精粹)

1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束. 例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以"of despair"结尾的字符串: "^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有&q

JavaScript 正则表达式——基本语法--图形化表示易懂

JavaScript 正则表达式——基本语法 定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%>','g'); 2. 字面量 var reg=/<%[^%>]%>/g; g: global,全文搜索,默认搜索到第一个结果接停止 i: ingore case,忽略大小写,默认大小写敏感 m: multiple lines,多行搜索(更改^