正则表达式和特殊符号

前端之家收集整理的这篇文章主要介绍了正则表达式和特殊符号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
15.2.2  匹配任意一个单个的字符(.):


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

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


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


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

	
C:\Python27\python.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\no"
if (re.match("f.o",a)):
    print '1111'

C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py

Process finished with exit code 0

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

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


C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

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

C:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

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

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

C:\Python27\python.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:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

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

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

C:\Python27\python.exe C:/Users/TLCB/PycharmProjects/untitled/eeeee/a14.py
1111

import re
a="aib"
if (re.search("[aeIoU]+b",a)):
    print '1111'
	
C:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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:\Python27\python.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.匹配子组

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

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

猜你在找的正则表达式相关文章