当前位置:必发365电子游戏 > Web前端 > search()返回的对象就是匹配对象,ABC | abc 表示即可以匹配 ABC
search()返回的对象就是匹配对象,ABC | abc 表示即可以匹配 ABC
2019-12-19

Python的 re 模块:大旨函数和章程

学学正则表明式笔记(二),学习正则表明式笔记

1. 利用 compile(卡塔尔(英语:State of Qatar)函数编写翻译正则表达式

  导入 re 模块后,在compile(卡塔尔(قطر‎中编写翻译正则表明式,比方:pattern = re.compile('正则宣布式',re.S卡塔尔(قطر‎,然后就能够利用pattern来进展相称了。

  在compile 中还足以带模块属性,即re.S,re.I,re.L,re.M,re.X等。

正则相称的种种方式

2.合作对象以致 group(卡塔尔和 groups(卡塔尔(英语:State of Qatar)方法

  匹配对象有多个重大的措施:group(卡塔尔(英语:State of Qatar)和 groups(卡塔尔。 调用 match(卡塔尔(英语:State of Qatar)大概search(卡塔尔国再次来到的对象正是匹配成对象,group(卡塔尔(英语:State of Qatar)要么再次来到整个配对象,要么依据要求重回特定子组。

  groups(卡塔尔国则仅重临三个含有唯豆蔻梢头恐怕全体子组的元组。若无子组的渴求,那么当group(卡塔尔(قطر‎依然再次回到整个相配时,groups(卡塔尔(قطر‎再次回到四个空元组。

1.择少年老成相称(|)

  择意气风发相配用管道符号(|),也正是竖线表示。代表能够从多少个形式中精选三个,可用于私分正则表达式。比方: ABC | abc 表示即能够相称 ABC,又足以相配 abc。

3. 施用 match(卡塔尔(英语:State of Qatar)方法匹配字符串

  match(卡塔尔(英语:State of Qatar)函数总括从字符串的序幕部分对形式进行相配。纵然相称成功,就回来叁个天造地设对象;若是合作退步,就回到 None,匹配对象的 group(卡塔尔(英语:State of Qatar)方法能够用于显示那个成功的相配。

 1 html = '<html><head>title</head><body>2333</body></html>'
 2 pattern = re.compile('<.*?head>(.*?)<.*?body>(.*?)<.*?>')
 3 
 4 m = re.match(pattern, html)
 5 
 6 print(m.group())
 7 print(m.group(1))
 8 print((m.group(2)))
 9 print(m.groups())
10 # 输出:
11 # <html><head>title</head><body>2333</body>
12 # title
13 # 2333
14 # ('title', '2333')

>>> re.match('foo', 'food on the table').group() 
'foo' 

2.相配猖狂单个字符

4. 选择 search(卡塔尔(英语:State of Qatar)在多少个字符串中找找情势,(找寻)

  search(卡塔尔(英语:State of Qatar)的职业办法与 match(卡塔尔国完全生机勃勃致,区别之处在于 search(卡塔尔会用它的字符串参数,在自由地方对给定正则表明式格局寻觅第三次面世的相称意况。

  假设寻找到成功的特别,就可以回来一个协作对象;不然,再次来到None。

  search(卡塔尔(قطر‎ 和 match(卡塔尔不一致之处在于,search(卡塔尔 会寻觅字符串中间部分。

>>> m = re.match('foo', 'seafood')     # 匹配失败 
>>> m = re.search('foo', 'seafood')   # 使用 search() 代替 
>>> if m is not None: m.group() 
... 
'foo'     # 搜索成功,但是匹配失败,在seafood中搜索foo    

3.从字符串起头恐怕结尾只怕单词边界相称

  例如:

 5.重复、特殊字符以致分组

  用一个极其电子邮件地址的正则表达式做例子。(w+@w+.com),那么些正则表明式只可以合营轻松的地点。

  为了在域名前加多主机名称帮忙,举例www.xxx.com,须要使用?,w+@(w+.)?w+.com,让(w+.)可选。

>>> pattern = 'w+@(w+.)?w+.com' 
>>> re.match(pattern, 'nobody@xxx.com').group() 
'nobody@xxx.com' 
>>> re.match(pattern, 'nobody@www.xxx.com').group() 
'nobody@www.xxx.com' 

  进一层强盛该示例,允许私下数量的中档子域名存在。把?改为 * 号。w+@(w+.)*w+.com

>>> patt = 'w+@(w+.)*w+.com' 
>>> re.match(patt, 'nobody@www.xxx.yyy.zzz.com').group() 
'nobody@www.xxx.yyy.zzz.com' 

  使用圆括号来合营和保存子组,以便于继续管理。

>>> m = re.match('(www)-(ddd)', 'abc-123') 
>>> m.group()                       # 完整匹配 
'abc-123' 
>>> m.group(1)                      # 子组 1 
'abc' 
>>> m.group(2)                      # 子组 2 
'123' 
>>> m.groups()                      # 全部子组 
('abc', '123') 

  group(卡塔尔(قطر‎平时用于以平凡情势呈现全体的十根据地分,但也能用于获 取各样相称的子组。能够应用 groups(卡塔尔方法来获取一个包括全数相配子字符串的元组。

4.字符集

  使用方括号表示字符集,能够合作字符聚焦的放肆符号。比如:b[aeiu]t,能够协作 bat、bet、bit、but。

6.选择 sub(卡塔尔和 subn(卡塔尔搜索与替换

  有八个函数/方法用于贯彻寻觅和替换作用:sub(卡塔尔国和 subn(卡塔尔国。两个差不离等同,都以将某字符串中持有相配正则表达式的有的进行某种格局的更换。

  用来替换的有的平时是多少个字符串, 但它也说不许是四个函数,该函数再次回到一个用来替换的字符串。

  subn(卡塔尔国和 sub(卡塔尔(英语:State of Qatar)的分歧点是subn(卡塔尔(英语:State of Qatar)还回到三个意味替换的总量,替换后的字符串和象征替换总的数量的数字一同作为八个兼有四个因素的元组重返。

>>> re.sub('X', 'Mr. Smith', 'attn: XnnDear X,n') 
'attn: Mr. Smith1212Dear Mr. Smith,12' 
>>> 
>>> re.subn('X', 'Mr. Smith', 'attn: XnnDear X,n') 
('attn: Mr. Smith1212Dear Mr. Smith,12', 2) 
>>> 
>>> print(re.sub('X', 'Mr. Smith', 'attn: XnnDear X,n'))
attn: Mr. Smith 

Dear Mr. Smith, 

>>> re.sub('[ae]', 'X', 'abcdef') 
'XbcdXf' 
>>> re.subn('[ae]', 'X', 'abcdef') 
('XbcdXf', 2) 

5.限定范围和否定

7.恢弘符号

   通过动用 (?iLmsux卡塔尔类别选项,顾客能够向来在正则表明式里面钦点二个依旧三个暗记,实际不是由此compile(卡塔尔(英语:State of Qatar)可能其余 re 模块函数。

  上面为局地应用 re.I/IGNORECASE 的示范, 最后三个演示在 re.M/MULTILINE 达成多行混合:

>>> re.findall(r'(?i)yes', 'yes? Yes. YES!!')  # (?i) 不区分大小写 
['yes', 'Yes', 'YES'] 
>>> re.findall(r'(?i)thw+', 'The quickest way is through this tunnel.') ['The', 'through', 'this'] 
>>> re.findall(r'(?im)(^th[w ]+)', """ 
... This line is the first, 
... another line, 
... that line, it's the best 
... """) 
['This line is the first', 'that line'] 

 

6.特殊符号*、+和?

7. 应用圆括号钦赐分组

  大器晚成对圆括号能够兑现以下自便三个(只怕三个)功效:1.对正则表明式进行分组;2.相称子组。

8.扩充表示法

  扩充表示法时以问号起首search()返回的对象就是匹配对象,ABC | abc 表示即可以匹配 ABC。(?…)的。常常用于在认清相配早先提供标识,达成八个前视(或然后视)匹配,也许规格检查。就算圆括号选用那些标志,但是独有(?P<name>)表述叁个分组相称。全部别的的都并未有创建一个分组。

正则表明式方式                  相称的字符串

(?:w+.)*               以句点作为最后的字符串,举个例子“google.”、“ twitter.”、“ facebook.”,不过这么些相配不会保留下来 供后续的运用和数据检索。

(?#comment卡塔尔        此处并不做合作,只是当作注释。

(?=.com卡塔尔               假如三个字符串前面跟着“.com”才做协作操作,并不采用其余目的字符串。

(?!.net卡塔尔                  借使贰个字符串前边不是接着“.net”才做同盟操作。

(?<=800-卡塔尔(英语:State of Qatar)              若是字符串早前为“800-”才做合作,假定为电话号码,雷同,并不利用此外输入字符串。

(?<!192.168.卡塔尔国      要是一个字符串从前不是“192.168.”才做合营操作,假定用于过滤掉大器晚成组 C 类 IP 地址。

(?(1卡塔尔y|x卡塔尔(英语:State of Qatar)                假如多个相称组 1(1)存在,就与 y匹配;否则,就与 x 匹配。

 

正则相当的各样模式 1.择生龙活虎相称(|) 择黄金年代相配用管道符号(|),也正是竖线表示。代表...