python 正则表达式

一、使用re模块

import re

1.re.search(pattern, string, flags=0)

  • re.search:扫描整个字符串并返回第一个成功的匹配

result = re.search(pattern, string, flags=0)

返回一个编译后的re.Match对象,对象的常用方法有:

  • result .group(num=0)
    • 返回分组第num组的值,0表示返回全部
  • result .start()
    • 返回第一个成功匹配的索引
  • result .end()
    • 返回最后一个匹配的索引
  • result .span()
    • 返回一个元组:(第一个成功匹配的索引, 最后一个匹配的索引)

例:

a3 = r'\.([a-z]*)\.(.*)\.'

result = re.search(a3, 'www.czy.czy12as123d.com')
print(result)
print(result.group())
print(result.group(2))
print(result.start())
print(result.end())
print(result.span())

执行结果:

<re.Match object; span=(3, 20), match=’.czy.czy12as123d.’>
.czy.czy12as123d.
czy12as123d
3
20
(3, 20)

2.re.match(pattern, string, flags=0)

  • re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

result = re.match(pattern, string, flags=0)

返回一个编译后的re.Match对象,对象的常用方法有:

  • result .group(num=0)
    • 返回分组后第num组的值,0表示返回正则的全部匹配
  • result .start()
    • 返回第一个成功匹配的索引
  • result .end()
    • 返回最后一个匹配的索引
  • result .span()
    • 返回一个元组:(第一个成功匹配的索引, 最后一个匹配的索引)

例:

a1 = r'.*y(\d*)as(\d*).*m$'
a2 = r'www\.czy\..*com$'
a3 = r'\.([a-z]*)\.(.*)\.'
a4 = r'\.czy(\d+).*'
a5 = r'\d+'

result = re.match(a1, 'www.czy.czy12as123d.com')
print(result)
print(result.group())
print(result.group(2))
print(result.start())
print(result.end())
print(result.span())

执行结果:

<re.Match object; span=(0, 23), match=‘www.czy.czy12as123d.com’>
www.czy.czy12as123d.com
123
0
23
(0, 23)

3.re.findall(pattern, string, flags=0)

  • 返回字符串中所有非重叠匹配项的列表。
    如果模式中存在一个或多个捕获组,则返回
    组的列表;这将是一个元组列表。

result = re.findall(pattern, string, flags=0)

例:

a1 = r'.*y(\d*)as(\d*).*m$'
a2 = r'www\.czy\..*com$'
a3 = r'\.([a-z]*)\.(.*)\.'
a4 = r'\.czy(\d+).*'
a5 = r'\d+'

result = re.findall(a3, 'www.czy.czy12as123d.com')
result1 = re.findall(a5, 'www.czy.czy12as123d.com')
print(result)
print(result1)

执行结果:

[(‘czy’, ‘czy12as123d’)]
[‘12’, ‘123’]

4.re.finditer(pattern, string, flags=0)

  • 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
  • 遍历这个可迭代对象返回一个编译后的re.Match对象

result = re.finditer(pattern, string, flags=0)

re.Match对象的常用方法有:

  • result .group(num=0)
    • 返回分组第num组的值,0表示返回全部
  • result .start()
    • 返回第一个成功匹配的索引
  • result .end()
    • 返回最后一个匹配的索引
  • result .span()
    • 返回一个元组:(第一个成功匹配的索引, 最后一个匹配的索引)

例:

result = re.finditer(a3, 'www.czy.czy12as123d.com')

for i in result:
    print(i.group())
    print(i.group(2))
    print(i.start())
    print(i.end())
    print(i.span())

执行结果:

.czy.czy12as123d.
czy12as123d
3
20
(3, 20)

5.re.split(pattern, string, maxsplit=0, flags=0)

  • split 方法按照能够匹配的子串将字符串分割后返回列表
  • maxsplit表示最大分割次数,0表示不限次数

result = re.split(pattern, string, maxsplit=0, flags=0)

例:

a5 = r'\d+'

result = re.split(pattern=a5, string='www.czy.czy12as123d.com', maxsplit=0)
print(result)

执行结果:

[‘www.czy.czy’, ‘as’, ‘d.com’]

6.re.compile(pattern, flags=0)

  • 编译一个正则表达式模式,返回一个模式对象

pat= re.compile(pattern, flags=0)

模式对象的方法有(这些方法除了增加步长之外跟re直接调用没有什么区别):

  • pat.search(string, pos, endpos)
  • pat.match(string, pos, endpos)
  • pat.findall(string, pos, endpos)
  • pat.split(string, pos, endpos)
  • pat.finditer(string, pos, endpos)

注:pat= re.compile(pattern, flags=0) 返回_compile(pattern, flags)方法,该方法经过编译返回re.Pattern对象。而我们直接使用re.findall()的返回值是_compile(pattern, flags).findall(string),说明还是通过re.Pattern这个对象调用他的方法,只不过默认步长是从头取到尾。

例:

a1 = r'.*y(\d*)as(\d*).*m$'
a2 = r'www\.czy\..*com$'
a3 = r'\.([a-z]*)\.(.*)\.'
a4 = r'\.czy(\d+).*'
a5 = r'\d+'

pat = re.compile(a5)
result = pat.findall('www.czy.czy12as123d.com', 12, 18)
print(result)

执行结果:

[‘2’, ‘123’]

二、常用的正则表达式

模式描述
[A-Z][A-Z] 表示一个区间,匹配所有大写字母,[a-z] 表示所有小写字母。
[a-z]匹配任何小写字母
[0-9]匹配任何数字。类似于 [0123456789]
[a-zA-Z0-9]匹配任何字母及数字
[…]用来表示一组字符,单独列出:[amk] 匹配 ‘a’,‘m’或’k’
[^…]不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
\w匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
\d匹配任意数字,等价于 [0-9].
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \$。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符本身,请使用 \^。
|指明两项之间的一个选择。要匹配 |,请使用 \|。
{n}n 是一个非负整数。匹配确定的 n 次。例如,‘o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,}n 是一个非负整数。至少匹配n 次。例如,‘o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。‘o{1,}’ 等价于 ‘o+’。‘o{0,}’ 则等价于 ‘o*’。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,“o{1,3}” 将匹配 “fooooood” 中的前三个 o。‘o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值