python之正则表达式-re模块的使用

正则表达式

正则表达式是一个特殊的字符串,由普通字符和特殊字符(元字符)组成,正则表达式的应用场景和领域非常广泛,几乎所有的编程语言都支持。正则表达式主要用来在大量的文本中,找到符合某个规律的字符串。

元字符
  • 普通字符:几乎是平常所见的字符(因为,其中某些字符在正则表达式中具有特殊的含义,不属于普通字符)。

  • 元字符:在正则表达式中具有特殊功能的字符,如果想要匹配字符串中的元字符,需要在前面加上\进行转义。常见的元字符如下:

    元字符描述
    \转移字符
    ^后面的内容在字符串的行首
    $前面的内容在字符串的行尾
    *前面一个字符的个数大于等于0
    +前面一个字符的个数大于等于1
    ?前面一个字符的个数为0或1
    {n}前面一个字符的个数为n
    {n,}前面一个字符的个数大于等于n
    {n,m}前面一个字符的个数在n到m之间,包含n和m
    ?与控制数量的元字符连用表示匹配模式改为非贪婪模式,例如*?
    .代表任意一个字符(换行符除外)
    ()根据括号里的表达式,找到并获取该字符串
    (?😃根据括号里的表达式,找到但不获取该字符串
    (?=)括号前的内容,在原字符串中,后面必须紧跟括号里正则表达式对应的内容
    (?!)括号前的内容,在原字符串中,后面不能跟括号里正则表达式对应的内容
    (?<=)括号前的内容,在原字符串中,前面必须有括号里正则表达式对应的内容
    (?<!)括号前的内容,在原字符串中,前面不能有括号里正则表达式对应的内容
    |表示或。z|food表示匹配z或者food,[z|f]ood表示匹配zood或food
    []匹配方括号中任意一个字符(各个字符之间不要用逗号隔开)
    [^]匹配方括号里字符以外的任意一个字符
    \b代表非字符。如果要找A,\bA表示A的前面不能有字符;A\b表示A的后面不能有字符。可以指定该字符属于Unicode还是ASCII,默认属于Unicode。
    \B代表字符。如果要找A,\BA表示A的前面必须有字符,A\B表示A的后面必须有字符。
    \d代表一个数字
    \D代表一个非数字字符
    \s代表一个空白字符
    \S代表一个非空白字符
    \w代表任意一个字,如一个字母、一个汉字等,默认是出现在Unicode中的字
    \W代表任意一个符号
import re
#\A
pattern = r'\Ahttp'
url = 'https://www.baidu.com'
#url = '123http;//www.baidu.com'
pattern = re.compile(pattern)
result = pattern.findall(url)
print(result)

#\Z
pattern = r'.com\Z'
url = 'https://www.baidu.com'
#url = '123http;//www.baidu.com.com'
pattern = re.compile(pattern)
result = pattern.findall(url)
print(result)

#^
pattern = r'^http'
url = 'https://www.baidu.com'
#url = '123http;//www.baidu.com'
pattern = re.compile(pattern=pattern)
result = pattern.findall(url)
print(result)

#$
pattern = r'\Ahttp'
url = 'https://www.baidu.com'
#url = '123http;//www.baidu.com'
pattern = re.compile(pattern=pattern)
result = pattern.findall(url)
print(result)

#\b
pattern = r'\bhttp'
url = 'https://www.baidu.com'
#url = '百度http;//www.baidu.com'
pattern = re.compile(pattern)
#pattern = re.compile(pattern,re.A)
result = pattern.findall(url)
print(result)

#\B
pattern = r'\Bhttp'
url = '百度https://www.baidu.com'
#url = 'http;//www.baidu.com'
pattern = re.compile(pattern)
result = pattern.findall(url)
print(result)

re模块

为了避免正则表达式中的元字符与python中某些特殊字符发生冲突,比如\,需要在正则表达式的前面加上r,表示该字符串是一个正则表达式,例如:

pattern = r'(.*)http \n'
re模块中常用的方法
函数功能
compile将正则表达式编译为正则对象
findall找到文本中所有能匹配的部分,第一个参数为正则表达式,第二个参数为文本(字符串)
match在文本开头处匹配,并且只匹配一个结果
search找到文本中能匹配
split将匹配内容作为分隔符,对文本进行分割
sub将匹配到的内容,替换成新字符串。第一个参数为正则表达式,第二个参数为新字符串。
subn与sub作用一样,并且还能额外统计匹配到的个数
compile对象常用的方法
函数功能
findall找到文本中所有能匹配的部分,结果返回一个列表
match在文本开头处匹配,并且只匹配一个结果
search找到文本中能匹配
split将匹配内容作为分隔符,对文本进行分割
sub将匹配到的内容,替换成新字符串。
subn与sub作用一样,并且还能额外统计匹配到的个数

compile的这些方法与re模块中的方法是一样的,只不过返回的结果更加人性化,调用起来也更加简单,不用再传入正则表达式作为参数了。

import re

#compile()
pattern = r'b.*u'
url = 'www.baidu.com'
pattern_obj = re.compile(pattern,re.I)
result = re.findall(pattern,url)
print(result)

#escape()
str = 'secape()'
result = re.escape(str)
print(result)

#findall()
pattern = r'baidu'
str = 'www.baidu.com-www.BAIDU.com-www.BaiDu.com'
result = re.findall(pattern,str,re.I)
print(result)

#finditer()
pattern = r'baidu'
str = 'www.baidu.com-www.BAIDU.com-www.BaiDu.com'
result = re.finditer(pattern,str,re.I)
print(result)
for item in result:
    print(item)

#match()
pattern = r'www'
str = 'www.baidu.com'
result = re.match(pattern,str)
print(result)

#search()
pattern = r'baidu'
str = 'www.BaiDu.com-www.baidu.com-www.BAIDU.com'
result = re.search(pattern,str,re.I)
print(result)

#split()
pattern = r'\.'
str = '.www.baidu.com'
result = re.split(pattern,str,2)
print(result)

#sub()
pattern = r'师父'
sub_str = '唐僧'
str = '师父的大徒弟是猴子,师父的二徒弟是你,师父的三徒弟是沙僧'
result = re.sub(pattern,sub_str,str,2)
print(result)

#subn()
pattern = r'师父'
sub_str = '唐僧'
str = '师父的大徒弟是猴子,师父的二徒弟是你,师父的三徒弟是沙僧'
result = re.subn(pattern,sub_str,str,2)
print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值