正则表达示 for Python3

2022/6/2 1:23:23

本文主要是介绍正则表达示 for Python3,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录:

目录
  • 前情提要
  • 1. 在Python3中 正则为 re 模块
  • 2. re.match函数
  • 3. re.search方法
  • 4. re.match 与 re.search的区别
  • 5. 检索和替换
  • 6. 正则表达式修饰符 – 可选标志
  • 7. 正则表达式模式
  • 8. 正则表达式实例
    • 8.1 字符类
    • 8.2特殊字符类

前情提要

从大量的文字内容中找到自己想要的东西,正则似乎是最好的方法.也是写爬虫不可缺少的技能.所以,别墨迹了赶紧好好学吧!

教程来自菜鸟教程,感谢!


1. 在Python3中 正则为 re 模块

import re

2. re.match函数

re.match –>从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话match()就返回none,语法:
re.match(pattern, string, flags = 0)
pattern –> 匹配正则表达式
string –>要匹配的字符串.
flags –> 标志位,用于控制正则的匹配方式,如:是否区分大小写,多行匹配等等.
匹配成功re.match方法返回一个匹配的对象,否则返回None.
可以用group(num)groups()匹配对象函数来获取匹配表达式.
group(num = 0)–> 匹配的整个表达式的字符串,group()可以一次输入多个级号,在这种情况下它将返回一个包含那些组所对应值的元组.
groups() –> 返回一个包含所有小组字符串的元组,从1至所含的小组号.

例子1:

#!/usr/bin/python3

# -*- coding:utf-8 -*-

import re

print(re.match(‘www’, ‘www.runoob.com).span()) # 在起始位置匹配. –>(0, 3)

print(re.match(‘com’, ‘www.runoob.com’) # 不在起始位置匹配. –> None

例子2:

import re

line = 'Cats are smarter than dogs'

matchObj = re.match(r'(.*) are (.*?) .*’, line, re.M|re.I')

if matchObj:

print('matchObj.group():', matchObj.group())

print('matchObj.group(1):', matchObj.group(1))

print('matchObj.group(2):', matchObj.group(2))

else:

print('No match!!')

3. re.search方法

re.search 扫描整个并返回第一个成功的匹配.语法:
re.search(pattern, string, flags=0) –> 参数说明和上面一样
匹配成功会返回一个匹配的对象,否则返回None.
group(num=0)groups() 用法和上面一样.
例子:

import re
print(re.search(‘www’, ‘www.baidu.com’).span()) # 在起起始位置匹配. –> (0,3)
print(re.search(‘com’, ‘www.baidu.com’.span()) # 不在起始位置匹配. –>(11,14)

例子2:

import re
line = ‘Cats are smarter than dogs’
searchObj = re.search(r'(.*) are (.*?) .*’, line, re.M|re.I')
if searchObj:
  print(‘searchObj.group() : ‘,searchObj.group())
  print(‘searchObj.group(1) : ‘,searchObj.group(1))
  print(‘searchObj.group(2) : ‘,searchObj.group(2))

4. re.match 与 re.search的区别

re.match只匹配字符串的开始,如果字符串开始不符合正则,则匹配失败,返回None.而re.search匹配整个字符串,直至找到一个匹配.
例子:

import re
line = ‘Cats are smarter than dogs’
matchObj = re.match(r’dogs’, line, re.M|re.I)
if matchObj:
  print(‘match–>matchObj.group():’, matchObj.group())
else:
  print(‘No match’)
  matchObj = re.search(r’dogs’, line, re.M|re.I)
if matchObj:
  print(‘search –> matchObj.group():’, matchObj.group())
else:
  print(‘No match’)

5. 检索和替换

re.sub(pattren, repl, string, count=0)
参数:
pattren–> 略
repl–>替换的字符串,也可以为一个函数.
string–>要被查找替换的原始字符串.
count–>模式匹配后替换的最大次数,默认0表示替换所有的匹配.
例子:

import re
phone = '2004-959-559' # 这是一个电话号码
# 删除注释
num = re.sub(r'#.*$’, “”, phone')
print(‘电话号码’, num)
#移除非数字的内容
num = re.sub(r’\D, “”, phone)
print(‘电话号码:’,num)
# repl的参数是一个函数
import re
#把匹配的数字*2
def double(matched):
  value = int(matched.group(‘value’))
  return str(value * 2)
s =‘A23G4HFD567’
print(re.sub(‘(?P<balue>\d+)’, double, s))

6. 正则表达式修饰符 – 可选标志

  正则表达工可以包含一些可选标志修饰符来控制匹配的械.修饰符被指定为一个可选的标志.多个标志可以通过按位OR(|)它们来指定,如re.I|re.M被设置成I和M标志:

  re.l –> 例匹配对大小写不敏感.

re.L –> 做本地化识别(locale-aware)匹配

  re.M –> 多行匹配,影响^和$

  re.S –> 使.匹配包括换行在内的所有字符.

  re.U –> 根据Unicode字符集解析字符,这个标志影响 \w , \W , \b , \B

  re.X –> 通过给予你更灵活的格式以便你将正则表达式写得更易于理解.

7. 正则表达式模式

  模式字符串使用特殊的语法来表示一个正则:

字母和数字表示他们自身.一个正则表达式模式中的字母和数字匹配同样的字符串.

  多数字母和数字前加一个反斜杠时会拥有不同的含义.

  标点符号只有被黑底时才匹配自身,否则它们的表示特殊的含义.

  反斜杠本身需要使用反斜杠转义

  由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们.模式元素(如r’/t’ == ‘//t’)匹配相应的特殊字符.

  下面列出了正则表达式模式语法中的特殊元素.如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变.

  ^ –> 匹配字符串的开头

  $ –> 匹配字符串的末尾

  . –> 匹配任意字符,除了换行符, 当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符.

  […] –> 用来表示一组字符,单独列出:[amk]匹配’a’,’m’,或’k’

[^…] –> 不在[]中的字符:[^abc]匹配除了a,b,c之外的字符.

  re* –> 匹配0个或多个表达式.

  re+ –> 匹配1个或多个表达式.

  re? –>匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式.

  re{n} –>

  re{n,} –>精确匹配n个前面表达式.

  re{n, m} –>匹配n到m次由前面的下面表达式定义的片段,贪婪方式

  a|b –> 匹配a或b

  (re) –> G匹配括号内的表达式,也表示一个组

  (?imx) –> 正则表达式包含三种可选标志:i,m,x, 只影响括号中的区域.

  (?-imx) –> 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。

  (?:re) –> 类似 (…), 但是不表示一个组

  (?imx: re) –> 在括号中使用i, m, 或 x 可选标志

  (?-imx: re) –> 在括号中不使用i, m, 或 x 可选标志

  (?#…) –> 注释

  (?= re) –> 前向肯定界定符。如果所含正则表达式,以 … 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。

  (?! re) –> 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功

  (?> re) –> 匹配的独立模式,省去回溯。

  \w –> 匹配字母数字

  \W –> 匹配非字母数字

  \s –> 匹配任意空白字符,等价于[\t\n\r\f]

  \S –> 匹配任意非空字符

  \d –> 匹配任意数字,等份于[0-9]

  \D –> 匹配任意非数字

  \A –> 匹配字符串开始

  \Z –> 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串.

  \z –> 匹配字符串结束

  \G –> 匹配最后匹配完成的位置.

  \b –> 匹配一个单词边界,也就是指单词和空格间的位置.例如,’re\b’可以匹配’never’中的’er’,但是不能匹配’verb’中的’er’

  \B –> 匹配非单词边界.和\b反过来

  \n \t等 –> 匹配一个换行符 制表符等

  \1…\9 –> 匹配第n个分组的子表达式.

  \10 –> 匹配第n个分组的子表达式,如果它经匹配,否则指的是八进制字符码的表达式

8. 正则表达式实例

  python –> 匹配”python“

8.1 字符类

  [Pp]ython –> ‘Python’或’python’

  rub[ye] –> ‘ruby’ 或’rube’

  [aeiou] –> 匹配中括号内的任意一个字母

  [0-9] –> 匹配任何数字 类似于[0123456789]

  [a-z] –> 匹配任何小写字母

  [A-Z] –> 匹配任何大写字母

  [a-zA-z0-9] –> 可以匹配任何字母及数字

  [^aeiou] –> 除了aeiou字母以外的所有字符

  [^0-9] –> 除了数字外的字符

8.2特殊字符类

  . –> 匹配除\n这外的任何单个字符.要匹配包括\n在内的任何字符,请使用[.\n的模式]

  \d \D \s \S \w \W 上面都有了



这篇关于正则表达示 for Python3的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程