python常用正则表达式及示例

2020-05-04  本文已影响0人  全村希望gone

前言

写了一整天正则表达式,把之前看了很久的但没理解的都弄懂了

问题

不知道你们有没有这个问题,反正我特地查过,但是别人的回答都没怎么看懂,网上是这么说的

看完之后还是一头雾水,直接看例子

import re

text = '你你你你你你你好'
# 为了防止语句出现None的情况,所以加以限制
if re.search(r'你*好', text):
    text0 = re.search(r'你*好', text).group()
    print('text0:' + text0)
if re.search(r'你+好', text):
    text1 = re.search(r'你+好', text).group()
    print('text1:' + text1)
if re.search(r'你?好', text):
    text2 = re.search(r'你?好', text).group()
    print('text2:' + text2)

输出如下

text0:你你你你你你你好
text1:你你你你你你你好
text2:你好

初步理解网上所说的含义

import re

text = '好'
# 为了防止语句出现None的情况,所以加以限制
if re.search(r'你*好', text):
    text0 = re.search(r'你*好', text).group()
    print('text0:' + text0)
if re.search(r'你+好', text):
    text1 = re.search(r'你+好', text).group()
    print('text1:' + text1)
if re.search(r'你?好', text):
    text2 = re.search(r'你?好', text).group()
    print('text2:' + text2)

输出如下

text0:好
text2:好

没有text1,表明当模式不存在时,+是无法进行匹配的。text0和text2输出为“好”,表明当模式不存在时,匹配0个。再结合第一份代码,可以得出上面的结论是对的。 再总结一下就是,当模式存在时,*和+作用是一样的;当模式不存在时,*和?作用是一样的,当模式存在且只匹配到一个时,这三个是一样的。

这个相对好懂,网上的回答

import re

text = '我很喜欢你'
# 为了防止语句出现None的情况,所以加以限制
if re.search(r'[喜欢爱讨厌]', text):
    text0 = re.search(r'[喜欢爱讨厌]', text).group()
    print('text0:'+text0)
if re.search(r'[喜欢爱讨厌]你', text):
    text1 = re.search(r'[喜欢爱讨厌]你', text).group()
    print('text1:'+text1)
if re.search(r'[爱讨厌]', text):
    text2 = re.search(r'[爱讨厌]', text).group()
    print('text2:'+text2)

输出如下

text0:喜
text1:欢你

可以看出,[ ]真的是惜字如金啊,但是我们可以把[ ]和+*联合使用(至于?,[ ]本来的功能无形中就相当于加了个?)。
例子

import re

text = '我很喜欢你'
# 为了防止语句出现None的情况,所以加以限制
if re.search(r'[喜欢爱讨厌]*', text):
    text0 = re.search(r'[喜欢爱讨厌]*', text).group()
    print('text0:'+text0)
if re.search(r'[喜欢爱讨厌]+你', text):
    text1 = re.search(r'[喜欢爱讨厌]+你', text).group()
    print('text1:'+text1)
if re.search(r'[爱讨厌]*', text):
    text2 = re.search(r'[爱讨厌]*', text).group()
    print('text2:'+text2)
if re.search(r'[爱讨厌]+', text):
    text3 = re.search(r'[爱讨厌]+', text).group()
    print('text3:'+text3)

输出如下

text0:
text1:喜欢你
text2:

可以看出,+的作用和上面说的还是一样的,当模式存在时,匹配多个,当模式不存在时匹配0个;但是*变成了无论模式是否存在,都匹配0个。

这个也很好理解,就和平时变成用的“或”差不多,网上的解释:

import re

text = '我很喜欢你'
# 为了防止语句出现None的情况,所以加以限制
if re.search(r'喜欢|爱', text):
    text0 = re.search(r'喜欢|爱', text).group()
    print('text0:'+text0)
text = '我很喜你'
# 为了防止语句出现None的情况,所以加以限制
if re.search(r'喜欢|爱', text):
    text0 = re.search(r'喜欢|爱', text).group()
    print('text1:'+text0)

输出如下

text0:喜欢

我之前以为text0的输出会是“欢”,是因为我把每个字符都看成是独立的元素,但是 | 并不是这样,切记。
今天主要用这几个,等我学了更多之后再回来更新。

参考资料

[1] Python3 正则表达式(这个总结的是真好,我每次都看这个,就是例子太少了,看完了之后只能自己去试错。)

上一篇 下一篇

猜你喜欢

热点阅读