3.2.1 正则表达式的语法

特别字符集:

‘.’

点号,在缺省的情况下,可以用来代替任何除换行符之外的字符;如果DOTALL标志设置了,它可以用来代替任何字符,包括换行符。

例子:

#re

import re

m = re.findall(‘a.‘, ‘ab a2 bb a+‘)

if m:

print(m)

结果输出如下:

[‘ab‘, ‘a2‘, ‘a+‘]

在这个例子里,先使用import语句导入正则表达式库re,然后使用函数findall来查找所有与正则表达式’a.’匹配的字符串,生成一个列表保存在m里,最后判断是否找到,如果找到了就打印出来。在这个正则表达式里’a.’,由字母a和点号组成,意思就是匹配以a开头的任意字符的两个字符的字符串。这里的任意字符是不包括换行符。

‘^’

插入符用来表示只匹配字符串开始的字符串,或者设置多行标志MUTILINE时,每一行新行开始也可以匹配。不使用这个字符就表示在任何位置上都匹配字符串。

例子:

#re

import re

m = re.findall(‘a.‘, ‘ab a2 bb a+‘)

if m:

print(m)

m = re.findall(‘a..‘, ‘ab a2 bb a+‘)

if m:

print(m)

m = re.findall(‘^a.‘, ‘ab a2 bb a+‘)

if m:

print(m)

结果输出如下:

[‘ab‘, ‘a2‘, ‘a+‘]

[‘ab ‘, ‘a2 ‘]

[‘ab‘]

在这个例子里,可以看到最后一行的输出,就只匹配了第一个字符串。

‘$’

美元符号用来表示匹配字符串末尾,或者匹配在新行前面的字符串末尾。比如用foo$来匹配字符串foo、foobar时,只会有foo可以匹配成功,而foobar不会,因为foo不是在词尾里。又例如当正则表达式为foo.$时,从字符串’foo1\nfoo2\n’时,当MULTILINE不起作用时,只会匹配到foo2;当多行起作用时,也会匹配到foo1。当只有一个$字符时,去搜索一个字符串’foo\n’,可以匹配到两个空的字符串出来,一个是在这个字符串新行之前,一个在这个字符串之后。

例子:

print(‘$‘)

m = re.findall(‘a.$‘, ‘ab a2 bb a+‘)

if m:

print(m)

m = re.findall(‘$a.‘, ‘ab a2 bb a+‘)

if m:

print(m)

m = re.findall(r‘foo$‘, r‘foobar\n‘)

if m:

print(m)

print(r‘foobar\n testfoo‘)

m = re.findall(r‘foo$‘, r‘foobar\n testfoo‘)

if m:

print(m)

m = re.findall(r‘foo.$‘, r‘foo1\nfoo2‘)

if m:

print(m)

m = re.findall(r‘$‘, r‘foo\n‘)

if m:

print(m)

结果输出如下:

$

[‘a+‘]

foobar\n testfoo

[‘foo‘]

[‘foo2‘]

[‘‘]

‘*’

星号的作用是在星号之前的字符可以0个到无限个重复。比如ab*将会匹配a、ab,或者a后面不限定个b的字符串,比如abbbbbbb等。

例子:

print(‘*‘)

m = re.findall(r‘ab*‘, r‘a ab abc abbb abbbb2 abbbbbbbb‘)

if m:

print(m)

结果输出如下:

*

[‘a‘, ‘ab‘, ‘ab‘, ‘abbb‘, ‘abbbb‘, ‘abbbbbbbb‘]

‘+’

加号的作用是在加号之前的字符可以1个到无限个重复。比如ab+表示是a后可以有一个到无限个b的字符串会匹配成功。即是ab、abb,或者无限个b,匹配a不会成功,这是与星号的区别之处。

例子:

print(‘+‘)

m = re.findall(r‘ab+‘, r‘a ab abc abbb abbbb2 abbbbbbbb‘)

if m:

print(m)

结果输出如下:

+

[‘ab‘, ‘ab‘, ‘abbb‘, ‘abbbb‘, ‘abbbbbbbb‘]

‘?’

问号的作用是在问号之前的字符可以不出现或者只出现一次。比如ab?表示只匹配a或者ab。

例子:

print(‘?‘)

m = re.findall(r‘ab?‘, r‘a ab abc abbb abbbb2 abbbbbbbb‘)

if m:

print(m)

结果输出如下:

?

[‘a‘, ‘ab‘, ‘ab‘, ‘ab‘, ‘ab‘, ‘ab‘]

*?,+?,??

星号、加号和问号都是贪婪算法,尽可能匹配更多的字符。但它们组合之后会有点不一样。具体如例子:

print(‘*?‘)

m = re.findall(r‘ab*?‘, r‘a ab abc abbb abbbb2 abbbbbbbb‘)

if m:

print(m)

print(‘+?‘)

m = re.findall(r‘ab+?‘, r‘a ab abc abbb abbbb2 abbbbbbbb‘)

if m:

print(m)

print(‘??‘)

m = re.findall(r‘ab??‘, r‘a ab abc abbb abbbb2 abbbbbbbb‘)

if m:

print(m)

结果输出如下:

*?

[‘a‘, ‘a‘, ‘a‘, ‘a‘, ‘a‘, ‘a‘]

+?

[‘ab‘, ‘ab‘, ‘ab‘, ‘ab‘, ‘ab‘]

??

[‘a‘, ‘a‘, ‘a‘, ‘a‘, ‘a‘, ‘a‘]

{m}

大括号中间添加数字方式来匹配括号之前字符的个数。比如a{6}表示匹配6个相同的a,如果少于6个a不会匹配成功,但允许多于6个。

例子:

print(‘a{6}‘)

m = re.findall(r‘a{6}‘, r‘baaaaaad aabaaaa aaaaa‘)

if m:

print(m)

结果输出如下:

a{6}

[‘aaaaaa‘]

{m, n}

大括号和m,n组成一个上下限的重复字符。m表示重复的下限个数,可以到0个;n表示重复的上限个数,可以到无穷大;尽可能向多的个数匹配。比如a{2, 3}b表示查找2到3个连续的a,并且后面紧跟着b的字符串。比如a{2,}b表示查找2个以上的a,并且后面跟着b的字符串。

例子:

print(‘a{2, 3}b‘)

m = re.findall(r‘a{2,3}b‘, r‘aab baaab ab aaa aaaaaab‘)

if m:

print(m)

print(‘a{2,}b‘)

m = re.findall(r‘a{2,}b‘, r‘aab baaab ab aaa aaaaaab‘)

if m:

print(m)

print(‘a{0,3}b‘)

m = re.findall(r‘a{0,3}b‘, r‘aab baaab ab aaa aaaaaab‘)

if m:

print(m)

结果输出如下:

a{2, 3}b

[‘aab‘, ‘aaab‘, ‘aaab‘]

a{2,}b

[‘aab‘, ‘aaab‘, ‘aaaaaab‘]

a{0,3}b

[‘aab‘, ‘b‘, ‘aaab‘, ‘ab‘, ‘aaab‘]

{m, n}?

大括号和m,n组成一个上下限的重复字符。m表示重复的下限个数,可以到0个;n表示重复的上限个数,可以到无穷大;尽可能向少的个数匹配。比如a{2, 3}?b表示查找2到3个连续的a,并且后面紧跟着b的字符串。比如字符串aaaaaa,a{3, 5}将尽可能匹配5个a,而a{3, 5}?只会匹配3个a就返回了。

例子:

print(‘a{2, 3}‘)

m = re.findall(r‘a{2,3}‘, r‘aa abaaaaaaa‘)

if m:

print(m)

print(‘a{2, 3}?‘)

m = re.findall(r‘a{2,3}?‘, r‘aa abaaaaaaa‘)

if m:

print(m)

结果输出如下:

a{2, 3}

[‘aa‘, ‘aaa‘, ‘aaa‘]

a{2, 3}?

[‘aa‘, ‘aa‘, ‘aa‘, ‘aa‘]

‘\’

反斜线表示后面跟着的字符表示为原来的字符。比如\*表示星号字符。

例子:

print(‘a*\*‘)

m = re.findall(r‘a*\*‘, r‘a* abaaa* abbbb‘)

if m:

print(m)

结果输出如下:

a*\*

[‘a*‘, ‘aaa*‘]

[]

方括号用来指明一个字符集合。

l 列出可能出现的字符集合。比如[amk]表示可能匹配a、m、k三个字符。

l 通过范围来指定出现字符的集合,范围的格式是两个字符和‘-’组成。比如[a-z]表示小写字母集合,包括了从a到z的所有字母。比如[0-5][0-9]表示两位数字00到59的集合。比如[0-9A-Fa-f]是表示十六进制所有出现的字符集合。如果‘-’出现在反斜线后面表示只使用‘-’字符,比如[a\-z];或者‘-’出现在集合的最前面或最后面都是表示使用‘-’字符,比如[a-]。

l 所有特别意义的字符在方括号内会失去表示特别的意义,仅当作本身字符使用。比如[(+*)]表示匹配(,+,*,)这四个字符,没有表示任意字符的意思。

l 分类字符意义的字符可以使用,比如\w或者\s,这些字符定义意义在后面。

l 非出现字符的集合表达。在中括号之后添加字符^表示排除这个集合里的字符,比如[^5]表示除5之外字符都匹配。[^^]是表示除^字符之外的所有字符都匹配。如果字符^不放在第一个字符是没有特别意义的。

l 为了匹配后中括号],需要使用转义字符\或者把它放在第一个字符位置。比如[()[\]{}]或者[]()[{}],要注意就是后一个是把]放在最前面第一个字符。

例子:

print(‘[amk]‘)

m = re.findall(r‘[amk]‘, r‘e a d m k b c‘)

if m:

print(m)

print(‘[a-z]‘)

m = re.findall(r‘[a-z]‘, r‘1 3 e a d m k b c 8 9‘)

if m:

print(m)

print(‘[0-5][0-9]‘)

m = re.findall(r‘[0-5][0-9]‘, r‘01 a1 99 49 38‘)

if m:

print(m)

输出结果如下:

[amk]

[‘a‘, ‘m‘, ‘k‘]

[a-z]

[‘e‘, ‘a‘, ‘d‘, ‘m‘, ‘k‘, ‘b‘, ‘c‘]

[0-5][0-9]

[‘01‘, ‘49‘, ‘38‘]

‘|’

A|B,A或B的正则表达式,表达的意思只要A表达式成立或者B表达式成立,都可以匹配成功。如果A表达全部匹配完成,将再不考虑B表达式。如果要匹配|,可以使用\|形式,或者[|]形式来编写。

例子:

print(‘[2-4]|[7-9]‘)

m = re.findall(r‘[2-4]|[7-9]‘, r‘1 2 3 4 5 6 7 8 9‘)

if m:

print(m)

输出结果如下:

[2-4]|[7-9]

[‘2‘, ‘3‘, ‘4‘, ‘7‘, ‘8‘, ‘9‘]

(...)

根据括号中任意的正则表达式来进行匹配,匹配成功之后作为元组输出。像括号三个点号,表示匹配任意三个字符作为一个元组;如果有四个点号,表示匹配四个任意字符作为一个元组。如果想匹配括号使用反斜线,或者中括号[(]或[)]方式。

例子:

print(‘(...)‘)

m = re.findall(r‘(...)‘, r‘123 45678 abcdefghijk‘)

if m:

print(m)

输出结果如下:

(...)

[‘123‘, ‘ 45‘, ‘678‘, ‘ ab‘, ‘cde‘, ‘fgh‘, ‘ijk‘]

蔡军生 QQ:9073204  深圳

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

时间: 2024-12-16 15:25:43

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

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

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,多行搜索(更改^