正则表达式和特殊符号

15.2.2  匹配任意一个单个的字符(.):


点字符或菊花(.) 符号匹配除换行符(NEWLINE) 外的任意一个单个字符
(Python的正则表达式有一个编译标识[S or DOTALL],该标识能去掉这个限制

使(.) 在匹配时包括换行符(NEWLINEs))


正表达式模式        匹配的字符串


import re
a="foo"
if (re.match("f.o",a)):
    print '1111'

	
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111


import re
a="fo"
if (re.match("f.o",a)):
    print '1111'

  
 import re
a="f
o"
if (re.match("f.o",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py

Process finished with exit code 0

15.2.4 从字符串的开头或结尾或单词边界开始匹配( ^/$ / /B )

import re
a="xxxfo"
if (re.search("fo",a)):
    print '1111'


C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

import re
a="xxxfo"
if (re.search("^fo",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py

Process finished with exit code 0

用这些符号的模式与我们将在本章讲述的其他大多数符号是不同的,因为这些符号指定了(匹配的位置)

在上面的核心笔记里,我们曾说过"matching"和"searching"之间的区别,

"matching" 是视图从整个字符串的开头进行匹配,

"searching"则可从一个字符串的任意位置开始匹配

import re
a="Form11"
if (re.search("^Form",a)):
    print '1111'


特别说明,如果你想匹配这两个字符中的任何一个(或全部),就必须用反斜线进行转义。

例如,如果你想匹配任何以美元符号($)结尾的字符串。

“.*$$”.	
  
  import re
a="aa$"
if (re.search(".*$$",a)):
    print '1111'

15.2.5 创建字符类([]):
	
尽管点号可用来匹配任意字符,但又时候你需要匹配某些个特殊的字符。

正因为如此,	方括号([])被发明出来。使用方括号的正则表达式会匹配方括号里的任何一个字符

正则表达式模式       匹配的字符串

import re
a="bat"
if (re.search("b[aeiu]t",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

[cr][23][dp][o2]:

一个包含4个字符的字符串:第一个字符是’r'或'c',后面是"2"或者"3",

再接下来是"d"或"p",最后是"o"或"2"  

import re
a="c3po"
if (re.search("[cr][23][dp][o2]",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

15.2.5  指定范围(-)或否定(^):

import re
a="zr1"
if (re.search("z[0-9]",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py

Process finished with exit code 0

import re
a="zr1"
if (re.search("z.[0-9]",a)):
    print '1111'

	
	
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

字符"z" 后面跟任意一个字符,然后是一个十进制数字 

import re
a="z"
if (re.search("[^aeiou]",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

15.2.6   使用闭包操作符(*,+,?,{}) 实现多次出现/重复匹配

现在我们来介绍最常用的正则表达式符号,即,特殊符号 *,+和?,

它们可以用于匹配字符串模式出现一次,多次,或未出现的情况。

* 匹配它左边那个正则表达式出现零次或零次以上的情况

import re
a="z"
if (re.search("[aeiou]*",a)):
    print '1111'

import re
a="a"
if (re.search("[aeiou]*",a)):
    print '1111'
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

加号(+) 操作符匹配它左边那个正则表达式至少出现一次的情况

import re
a="a"
if (re.search("[aeiou]+",a)):
    print '1111'

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

import re
a="aib"
if (re.search("[aeiou]+b",a)):
    print '1111'
	
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

问号操作符(?) 匹配它左边那个正则表达式模式出现零次或一次的情况:

还有花括号操作符({}),花括号里可以是单个的值,也可以是由逗号分开的一对值。

如果是一个值,如,{N},则表示匹配N次出现:如果是一对值,即{M,N},

就表示匹配M次到N此出现。

可以在这些符号前用反斜线进行转义,使它们失去特殊作用,即,"*" 将匹配星号本身等

import re
a="abcefg"
p=re.compile("([a-z]{3,5}).*")
m=p.match(a)
print m.group(1)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a15.py
abcef

在上表中,我们注意到问号出现了不只一次(被重载)

问号有两种含义:

1. 单独使用时表示匹配出现零次或一次的情况

2.紧跟在表示重复的元字符后面时,表示要求搜索引擎匹配的字符串越短越好

import re
a="6699"
if (re.search("66[a-z]?99",a)):
    print '1111'

	
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

import re
a="66u99"
if (re.search("66[a-z]?99",a)):
    print '1111'

	
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

import re
a="66uu99"
if (re.search("66[a-z]?99",a)):
    print '1111'

	
C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py

?表示匹配出现0次或者1次


import re
a="66aa99bb99"
p=re.compile("66(.*?)99")
m=p.match(a)
print m.group(1)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a15.py
aa

import re
a="66aa99bb99"
p=re.compile("66(.*)99")
m=p.match(a)
print m.group(1)

C:Python27python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a15.py
aa99bb

15.2.7  特殊字符表示字符集:

我们还提到有一些特殊字符可以用来代表字符集合。例如,你可以不使用"0-9"这个范围表示十进制数字

而改用简写"d"表示 

另一个特殊的字符"w" 可用来表示整个字符数字的字符集,即相当于"A-Za-z0-9"的简写形式

特殊字符"s" 代表空白字符 

这些特殊字符的大写形式表示不匹配,比如,"D"表示非十进制数字的字符 

15.2.8 用圆括号(())组建组:

现在,或许我们可以匹配一个字符串和丢弃那些不匹配的字符串了,但又时候,我们也许对匹配的数据本身更有兴趣。


但有时候,我们也许对匹配的数据本身更有兴趣。 我们不仅想知道是否整个字符串匹配我们的条件(正则表达式)

还像在匹配成功时取出某个特定的字符串或子字符串。

一对圆括号(())和正则表达式一起使用时可以实现以下任意一个(或两个)功能:

1.对正则表达式进行分组

2.匹配子组

有时你需要对正则表达式进行分组,其中一个很好的例子就是,你要用两个不同的正则表达式去比较一个字符串。

另一个理由是为整个正则表达式添加一个重复操作符

原文地址:https://www.cnblogs.com/hzcya1995/p/13349199.html