python :re模块基本用法

re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)

import re
print(re.match("www", "www.runoob.com") )
print(re.match("com", "www.runoob.com"))

结果:
在这里插入图片描述
re.search()
re.search()方法扫描整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None。

与re.match()方法不同,re.match()方法要求必须从字符串的开头进行匹配,如果字符串的开头不匹配,整个匹配就失败了;

re.search()并不要求必须从字符串的开头进行匹配,也就是说,正则表达式可以是字符串的一部分。

import re
print(re.search("com", "www.runoob.com") )
print(re.match("com", "www.runoob.com"))

结果:
在这里插入图片描述
re.findall的用法
在import re中,(re.findall(pattern, string, flags=0)):返回string中所有与pattern相匹配的全部字符串,得到数组

import re
text = "I am so happy! "
array1 = re.findall("[a-zA-Z]", text)
array2 = re.findall("[a-zA-Z]+", text)
print(array1)
print(array2)

在这里插入图片描述
re.sub
替换字符串中的某些子串,可以用正则表达式来匹配被选子串。

re.sub(pattern, repl, string, count=0, flags=0)

pattern:表示正则表达式中的模式字符串;

repl:被替换的字符串(既可以是字符串,也可以是函数);

string:要被处理的,要被替换的字符串;

count:匹配的次数, 默认是全部替换

import re
st = "hello 2019"
st = re.sub("([0-9]+)","yudengwu",st)
print(st)

结果
在这里插入图片描述
re.replace
替代字符串中的某一些子串为另一些字符。 str.replace(old, new[, max])

old – 将被替换的子字符串。
new – 新字符串,用于替换old子字符串。
max – 可选字符串, 替换不超过 max 次

st = "我喜欢你,喜欢你"
st = st.replace("喜欢","爱",1)
print(st)

在这里插入图片描述
re.group()

group() 同group(0)就是匹配正则表达式整体结果
group(1) 列出第一个括号匹配部分,
group(2) 列出第二个括号匹配部分,
group(3) 列出第三个括号匹配部分。

没有匹配成功的,re.search()返回None
group() 同group(0)就是匹配正则表达式整体结果
group(1) 列出第一个括号匹配部分,
group(2) 列出第二个括号匹配部分,
group(3) 列出第三个括号匹配部分。
没有匹配成功的,re.search()返回None
当然郑则表达式中没有括号,group(1)肯定不对了。

import re
a = "123abc456"
print (re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) )  #123abc456,返回整体
print (re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))  #123
print (re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2) )  #abc
print (re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3) )  #456

元字符
\d 匹配任何十进制数;它相当于类 [0-9]。
\D 匹配任何非数字字符;它相当于类 [^0-9]。
\s 匹配任何空白字符;它相当于类 [ fv]。
\S 匹配任何非空白字符;它相当于类 [^ fv]。
\w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。
\W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_]。
元字符[^]. 你可以用补集来匹配不在区间范围内的字符。其做法是把"“作为类别的首个字符;其它地方的”"只会简单匹配 “"字符本身。例如,[5] 将匹配除 “5” 之外的任意字符。同时
元字符 ^ 表示匹配字符串的开始,如”^ab+"表示以ab开头的字符串。
元字符(),元字符backslash。做为 Python 中的字符串字母,反斜杠后面可以加不同的字符以表示不同特殊意义。
元字符($),匹配字符串的结尾或者字符串结尾的换行之前。
元字符(*),匹配0个或多个

元字符(?),匹配一个或者0个
元字符(+), 匹配一个或者多个
元字符(|), 表示"或",如A|B,其中A,B为正则表达式,表示匹配A或者B

元字符({})
元字符“.”在默认模式下,匹配除换行符外的所有字符。在DOTALL模式下,匹配所有字符,包括换行符。
元字符( “( )” ),用来表示一个group的开始和结束。
\u4e00-\u9fa5 匹配任何中文 如[\u4e00-\u9fa5]{2,5} 表示匹配任意中文2到5个字

书籍 《Python自然语言处理实战 》正则例子

import re

text_string = '因此从某种意义上来说除了部分顶层高收入人群确实属于实际意义上的富豪以外,其他人在收入上确实普遍不高。就比如你名下资产100万。然而仅仅是房子就占了99万,那你也只不过属于万元户而已。因为房子是用来住的,值多少钱对我们拥有一套房的人来说意义不大!'
regex = '意义'
p_string = text_string.split('。')  # 以句号为分隔符通过split切分
for line in p_string:
    if re.search(regex, line) is not None:  # search方法是用来查找匹配当前行是否匹配这个regex,返回的是一个match对象
        print(line)
print()

# 例二:匹配任意一个字符
# 用 . 来匹配任意一个字符,即代替任何单个字符(换行符除外)
import re

text_string = '因此从某种意义上来说除了部分顶层高收入人群确实属于实际意义上的富豪以外。其他人在收入上确实普遍不高,就比如你名下资产100万。然而仅仅是房子就占了99万。那你也只不过属于万元户而已。因为房子是用来住的,值多少钱对我们拥有一套房的人来说意义不大。'
regex = '..万'
p_string = text_string.split('。')
for line in p_string:
    if re.search(regex, line) is not None:
        print(line)
print()

# 例3:匹配开始和结尾字符串
# 字符 ^ 匹配开始字符串;字符 $ 匹配结尾字符串
import re

text_string = '文本最重要的来源无疑是网络。我们要把网络中的文本获取形成一个文本数据库。利用一个爬虫抓取到网络中的信息。' \
              '爬取的策略有广度爬取和深度爬取。根据用户的需求,爬取可以有主题爬取和通用爬虫之分。'
# regex = '^文本'
regex = '信息$'
p_string = text_string.split('。')
for line in p_string:
    if re.search(regex, line) is not None:
        print(line)
print()

# 例4:使用中括号匹配多个字符串
# 字符 [] 匹配多个字符串
import re

text_string = '[重要的]今年的第七号台风23日登陆广东沿海地区。上海发布暴雨蓝色预警。[紧要的]中国对印度连发强硬信息,印度急切需要结束对峙'
regex = '^\[[重紧]..\]'
p_string = text_string.split('。')
for line in p_string:
    if re.search(regex, line) is not None:
        print(line)
    else:
        print('not match')
print()

# 使用转义字符:
import re

if re.search(r'\\', 'I have one nee\dle') is not None:
    print('match it')
else:
    print('not match')
print()

# 抽取文本中的数字
# [0-9]代表从0-9的数字 [a-z]代表冲a-z所有的小写字母
import re

year_string = []
strings = ['war of 1812', 'there are 5280 feet to a mile', 'happy new year 2016']
for string in strings:
    if re.search('[1-2][0-9]{3}', string):  # 即匹配从1000-2999之间的数字 {3}即重复之前的[0-9]3次
        year_string.append(string)
print(year_string)
print()

在这里插入图片描述

  • 7
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

总裁余(余登武)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值