使用正则表达式匹配

Python语言及其应用

 7.1.3使用正则表达式匹配

正则表达式使用:首先需要定义一个用于匹配的模式(pattern)字符串和一个匹配的对象:源(source)字符串,如下,

Result = re.match(‘’You,’Young France’)

这里的 “You”是模式,“Young France”是源——你想检查的字符串。函数用于查看源是否以模式开头。

 

以下列出几种匹配方法,

match( )以某某开头作精准匹配,

search( )会返回第一次成功匹配,如果存在的话

findall( )会返回所有不重叠的匹配,如果存在的话

split( )会根据pattern将source切分成若干段,返回由这些片段组成的列表

sub( )还需要一个额外的参数repacement,他会把source中所有匹配pattern给出replacement

  

1、使用match( )进行精准匹配

[root@promethus te]# python

Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49)

[GCC 7.2.0] on linux

Type "help", "copyright", "credits" or "license" for more information.

>>> import re

>>> aaa = 'Young FranceYou'

>>> m = re.match('You', aaa)

>>> print(m)

<_sre.SRE_Match object; span=(0, 3), match='You'>

>>> print(m.group())

You

 

 >>> n = re.match('.*Fran', aaa)

>>> print (n)

<_sre.SRE_Match object; span=(0, 10), match='Young Fran'>

>>> print (n.group())

Young Fran

>>> 

以下对新模式能够匹配成功的解释:

.代表任何单一字符

*代表任意一个它之前的字符.*代表任意多个字符(包括0个)

 

2、使用search( )寻找首次匹配

使用search('Frank', aaa)查找任意位置的“Frank”或“Fran”,无需通配符。

 

  

3、使用findall( )寻找所有匹配

结合.*?匹配规则进行。

 

  

4、使用split ( )按匹配切分

将一个字符串切分成由一系列的子串组成的列表

 

  

5、使用sub ( )替换匹配

 

  

6、模式:特殊字符归类

模式    匹配

\d     一个数字字符

\D     一个非数字字符

\w    一个字母或数字字符

\W    一个非字母非数字字符

\s     空白符

\S     非空白符

\b     单词边界(一个\w与\W之间的范围,顺序可逆)

\B     非单词边界

 验证操作

 

  

7、模式:使用标识符

模式    匹配

abc     文本值abc

.        除\n外的任何字符

^        源字符串的开头

$        源字符串的结尾

prev?      0个或1个prev

prev*      0个或多个prev,尽可能多的匹配

prev*?     0个或多个prev,尽可能少的匹配

prev+      1个或多个prev,尽可能多的匹配

prev+?     1个或多个prev,尽可能少的匹配

prev{m}      m个连续的prev

prev{m,n}    m到n个连续的prev,尽可能多的匹配

prev{m,n}    m到n个连续的prev,尽可能少的匹配

[abc]         a或b或c,跟[a|b|c]一样

[^abc]        非(a或b或c

prev(?=next)       如果后面为next,返回prev

prev(?!next)       如果后面为非next,返回prev

(?<=prev)next      如果前面为prev,返回next

(?<!prev)next      如果前面为非prev,返回next

示例

>>> sour = '''I wish I may, I wish I might

... Have a dish of fish toight.'''

>>> re.findall('wish', sour)             

['wish', 'wish']

 

  

8、模式:定义匹配的输出

当使用时match( )或search( )时,所有的匹配会以的形式返回对象m.group()中,如果你用括号将某一个模式包裹起来,括号中模式匹配得到的结果归自己的group中,而调用m.groups()可以得到包含这些匹配的元祖,如下,

>>> import re

>>> sour = '''I wish I may, I wish I might

... Have a dish of fish toight.'''

>>> m = re.search(r'(?P<DISH>. dish\b).*(?P<FISH>\bfish)', sour)

>>> m.group()

 

自此,完成正则匹配基本功能。

posted @ 2019-07-16 09:12  wang_wei123  阅读(3175)  评论(0编辑  收藏  举报