加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

书籍正则

发布时间:2020-12-14 06:12:35 所属栏目:百科 来源:网络整理
导读:1 正则表达式,简称为regex,是文本模式的描述方法。例如,d 是一个正则表达式,表示一位数字字符,即任何一位 0 到 9 的数字 虽然在Python中使用正则表达式有几个步骤,但每一步都相当简单。 ? 1.用import re导入正则表达式模块。 ? 2.用re.compile()函
1 正则表达式,简称为regex,是文本模式的描述方法。例如,d 是一个正则表达式,表示一位数字字符,即任何一位 0 到 9 的数字

虽然在Python中使用正则表达式有几个步骤,但每一步都相当简单。

? 1.用import re导入正则表达式模块。

? 2.用re.compile()函数创建一个Regex对象(记得使用原始字符串)

*意味着“匹配零次或多次”,+(加号)则意味着“匹配一次或多次”。星号不要求分组出现在匹配的字符串中,但加号不同,加号前面的分组
? 3.向Regex对象的search()方法传入想查找的字符串。它返回一个Match对象。?
?? 4.调用Match对象的group()方法,返回实际匹配文本的字符串

代码举例

import re

message = my phone number is 415-555-1011 .

phone_search = re.compile(d{3}-d{3}-d{4})
mo = phone_search.search(message)
print(mo.group())
View Code

字符|称为“管道”。希望匹配许多表达式中的一个时,就可以使用它。例如,正则表达式r‘Batman|Tina Fey‘将匹配‘Batman‘或‘Tina Fey‘。

heroRegex = re.compile(rfin|tian|an|and)
message2 = I can be fin and tian an men
mo2 = heroRegex.search(message2)
print(mo2.group())
View Code

你可以认为?是在说,“匹配这个问号之前的分组零次或一次”。

如果需要匹配真正的问号字符,就使用转义字符?。

>>> phoneRegex = re.compile(r‘(ddd-)?ddd-dddd‘)
>>> mo1 = phoneRegex.search(‘My number is 415-555-4242‘)
>>> mo1.group()
‘415-555-4242‘
>>> mo2 = phoneRegex.search(‘My number is 555-4242‘)
>>> mo2.group()
‘555-4242‘

?

4 用星号匹配零次或多次

  *(称为星号)意味着“匹配零次或多次”,即星号之前的分组,可以在文本中出现任意次。它可以完全不存在,或一次又一次地重复。让我们再来看看Batman的例子。
  >>> batRegex = re.compile(r‘Bat(wo)*man‘)
>>> mo1 = batRegex.search(‘The Adventures of Batman‘)
>>> mo1.group()
‘Batman‘

>>> mo2 = batRegex.search(‘The Adventures of Batwoman‘)
>>> mo2.group()
‘Batwoman‘

>>> mo3 = batRegex.search(‘The Adventures of Batwowowowoman‘)
>>> mo3.group()
‘Batwowowowoman‘


  对于‘Batman‘,正则表达式的(wo)部分匹配wo的零个实例。对于‘Batwoman‘,(wo)匹配wo的一个实例。对于‘Batwowowowoman‘,(wo)*匹配wo的4个实例。

  如果需要匹配真正的星号字符,就在正则表达式的星号字符前加上倒斜杠,即*。
星号*

?

?

*意味着“匹配零次或多次”,+(加号)则意味着“匹配一次或多次”。星号不要求分组出现在匹配的字符串中,但加号不同,加号前面的分组必须“至少出现一次”。
加号+

?

7.3.6 用花括号匹配特定次数

  如果想要一个分组重复特定次数,就在正则表达式中该分组的后面,跟上花括号包围的数字。例如,正则表达式(Ha){3}将匹配字符串‘HaHaHa‘,但不会匹配‘HaHa‘,因为后者只重复了(Ha)分组两次。

  除了一个数字,还可以指定一个范围,即在花括号中写下一个最小值、一个逗号和一个最大值。例如,正则表达式(Ha){3,5}将匹配‘HaHaHa‘、‘HaHaHaHa‘和‘HaHaHaHaHa‘。

  也可以不写花括号中的第一个或第二个数字,不限定最小值或最大值。例如,(Ha){3,}将匹配3次或更多次实例,(Ha){,5}将匹配0到5次实例。花括号让正则表达式更简短
花括号

Python的正则表达式默认是“贪心”的,这表示在有二义的情况下,它们会尽可能匹配最长的字符串。花括号的“非贪心”版本匹配尽可能最短的字符串,即在结束的花括号后跟着一个问号

>>> greedyHaRegex = re.compile(r‘(Ha){3,5}‘)
>>> mo1 = greedyHaRegex.search(‘HaHaHaHaHa‘)
>>> mo1.group()
‘HaHaHaHaHa‘

>>> nongreedyHaRegex = re.compile(r‘(Ha){3,5}?‘)
>>> mo2 = nongreedyHaRegex.search(‘HaHaHaHaHa‘)
>>> mo2.group()
‘HaHaHa‘
贪心和非贪心
1.如果调用在一个没有分组的正则表达式上,例如ddd-ddd-dddd,方法findall()将返回一个匹配字符串的列表,例如[‘415-555-9999‘,‘212-555-0000‘]。
2.如果调用在一个有分组的正则表达式上,例如(ddd)-(ddd)-(dddd),方法findall()将返回一个字符串的元组的列表(每个分组对应一个字符串),例如[(‘415‘,‘555‘,‘1122‘),(‘212‘,‘0000‘)]
d  0到9的任何数字
        
 D  除0到9的数字以外的任何字符
w 任何字母、数字或下划线字符(可以认为是匹配“单词”字符)
        
W  除字母、数字和下划线以外的任何字符
s   空格、制表符或换行符(可以认为是匹配“空白”字符)

S 除空格、制表符和换行符以外的任何字符

有时候你想匹配一组字符,但缩写的字符分类太宽泛。你可以用方括号定义自己的字符分类。例如,字符分类[aeiouAEIOU]将匹配所有元音字符,不论大小写也可以使用短横表示字母或数字的范围。例如,字符分类[a-zA-Z0-9]将匹配所有小写字母、大写字母和数字。

  请注意,在方括号内,普通的正则表达式符号不会被解释。这意味着,你不需要前面加上倒斜杠转义.、*、?或()字符zi
自定义匹配类型

?

通过在字符分类的左方括号后加上一个插入字符(^),就可以得到“非字符类”。非字符类将匹配不在这个字符类中的所有字符

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读