python 正则表达式1

在学习python正则表达式的过程中一直对为什么要加原生字符串非常不理解,也不清楚为什么要使用"\b",经过讨论有一点新的收获,还不知道是否正确,现总结出来,望看到的伙伴多多评论,多多指正。

1.正则表达式

首先要清楚正则表达式是用于处理字符串的强大工具,它并不是python的一部分,而是嵌入python的微小的、高度专业化的语言。正则表达式拥有自己独特的语法。
不同的语言均有使用正则表达式的方法,各不相同,python通过re模块来实现。

2. 转义字符(以前的笔记引用别人的,忘记在哪里看的了,感谢!)

转义字符不是python这门语言所独有的,准确的讲,这是一个计算机专业词汇。
在计算机当中,我们可以写出123 ,也可以写出字母abcd,
但有些字符我们无法手动书写,比如我们需要对字符进行换行处理,但不能写出来换行符,当然我们也看不见换行符。
像这种情况,我们需要在字符中使用特殊字符时,就需要用到转义字符。

3. “\b”的特殊

但在python中"\b"表示退格符,删去前面一个字符。

# 在python中:\b: 退格符
a = '我今天不吃火锅'
b = '我今天不\b吃火锅'
print('a的输出结果:', a)
print('b的输出结果:', b)

在这里插入图片描述
而在正则表达式中"\b"是表示匹配单词的开始或结尾。
在这里插入图片描述
针对这种情况,当我们在python正则表达式中使用"\b"时,我们希望"\b"依照正则的解析方式,而不是python的解析方式,因此,需要在前面加上r(raw string),告诉python不先使用python的方式对r后面的字符串进行解析,而是保留原样。

当给定一组字符串

q = 'my shop name My_SHOP my_shop '

我们想找出所有以m开头的字符串时,可以使用的正则表达式为

'\bm\w*\b'

但是当我们将上面这个模块放入python,发现python按照退格符解析该模块

q = 'my shop name My_SHOP my_shop '

pattern = '\bm\w*\b'

print(pattern)

输出结果为:
在这里插入图片描述
但是我们使用python并放在正则表达式中不希望"\b"解析为退格符,此时可以使用r模式

pattern1 = r'\bm\w*\b'
print(pattern1)

结果为:
在这里插入图片描述

因此当在python中使用正则表达式时,为了避免python对模式字符串按照python语法而非正则语法进行解析,我们需要使用r

q = 'my shop name My_SHOP my_shop '

pattern = '\bm\w*\b'
pattern1 = r'\bm\w*\b'
res = re.findall(pattern1, q, re.I)  # 找到以m开头的单词,不区分大小写

print(pattern)
print(pattern1)
print(res)

在这里插入图片描述
此时,模块字符串将不被提前解析,而被按照原本的 '\bm\w*\b’带入findall函数。
这样模块字符串才是正确的。而没有r的 '\bm\w*\b’即pattern代表的字段,再进行findall函数计算前,已被解析为"m\w" 字符串,而非需要的正则表达式。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值