python re基本函数使用

import re
import string

# 简单入门
pattern = r'(\d+).(\d+)'  # 正则表达式模式
s = '123.45'  # 目标字符串
pattern = re.compile(pattern)  # 编译
match = pattern.search(s)  # 查找匹配
if match:
    print('匹配的字符串', match.group())  # 返回目标字符串和模式匹配的内容
    # 对于一个模式,里面可能含有子模式,通常使用()包裹,在上面(?P<int>\d+)就是一个子模式
    # 通过调用group方法,可以获取子模式所匹配的内容,其参数有两种类型
    # int:从左往右开始计数:1代表第一个括号 2代表第二个括号 0代表整个模式匹配的字符串
    # string:?P<...>中的...,通过
    print('整数部分', match.group('int'))
    # print('整数部分', match.group(1))
    print('小数部分', match.group('float'))
    # 当含有多个子模式时,下面方法返回一个元组,里面每一个元素对应一个模式所匹配的内容
    # 在定义模式的时候,加括号()和不加括号之间差别很大,注意区分
    # 加():意味着创建一个子模式,调用groups方法时,对应返回结果中的一个元素
    print(match.groups())
else:
    print('no match')

# search方法和match方法的区别
pattern = 'c'
s = 'abcabc'
print('match', re.match(pattern, s))  # 不匹配,因为match方法从头开始匹配,一旦不满足,则停止匹配,返回Node
print('search', re.search(pattern, s))

# 使用sub方法
# 将一个字符串的某个内容插入到另外一个字符串
print(re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
             r'static PyObject*\npy_\1(void)\n{',
             'def myfunc():'))


# 将一个字符串的某个内容经过函数处理过后插入到另外一个字符串
def dashrepl(matchobj):
    if matchobj.group(0) == '-':
        return ' '
    else:
        return '-'


print(re.sub('-{1,2}', dashrepl, 'pro----gram-files'))

# 贪婪模式和非贪婪模式
pattern = [r'<.*>', r'<.*?>']  # 后者为非贪婪模式,一旦在目标中找到相应的匹配,即停止查找并且返回结果
s = '<a> b <c>'
for p in pattern:
    match = re.search(p, s)
    print('entire s', match.group(0))

# 匹配双引号里面的内容
pattern = r'([\',"])(?P<content>.*)([\',"])'
s = '"zhangshan"'
match = re.search(pattern, s)
if match:
    print(match.group(0))
    print('content:', match.group('content'))

# 开头字符为a或者b或者c时,后面紧接的abc才能完成匹配
pattern = r'(?<=a|b|c)abc'
strings = ['aabc', 'babc', 'dabc']
for s in strings:
    match = re.search(pattern, s)
    print(s, match)

# 开头字符为abc,后续字符不是.png时完成匹配
pattern = r'abc(?!.png)'
imgs = ['abc.png', 'abc.jpg', 'abc.jpeg']
for img in imgs:
    match = re.search(pattern, img)
    print(img, match)

# 匹配两个重复的abc字符串 \number,number表示重复的次数
pattern = r'(ab) \1'
s = 'ab ab'
print(re.search(pattern, s))

# group方法简单使用
m = re.match(r"(\w+) (\w+) (\w+)", "Isaac Newton physicist hello")  # 三个子模式
print(m.group(0))
print('groups', m.groups())  # 三个子模式,里面有三个元素
print(m.group(1))
print(m.group(2))
print(m.group(1, 2))

# (?P<name1>pattern1):给pattern1模式命名为name1,其中?P<name1>不参与模式的匹配
m = re.match(r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcolm Reynolds")
print(m.group('first_name'))
print(m.group('last_name'))
# 调用m.groupdict()方法返回字典样式的结果
print('dictionary', m.groupdict())  # {'first_name': 'Malcolm', 'last_name': 'Reynolds'}

# 在一组混合字符中,找到其中所有的数字字符
s = 'hhh1jKk2dHf45fgf123ee'
pattern = r"(?i:[a-z]+)"  # (?i:....)忽略模式匹配的大小写
print(re.search(pattern, s))
# findall和split所获取的内容恰恰相反,互为补充
print('findall', re.findall(pattern, s))
numbers = re.split(pattern, s)
numbers = [ele for ele in numbers if ele != '']
print(numbers)

# This is useful if you want to match an arbitrary literal string
# that may have regular expression metacharacters in it
# 输出所有合法的字符
print(re.escape('http://www.python.org'))
legal_chars = string.ascii_lowercase + string.digits + "!#$%&'*+-.^_`|~:"
print('[%s]+' % re.escape(legal_chars))

# 将特殊字符转化为符合正则表达式语法规则的形式
operators = ['+', '-', '*', '/', '**']
print('|'.join(map(re.escape, sorted(operators, reverse=True))))

# 找到一个句子中所有的副词
# 同时标记它们的起始结束位置
# finditer返回一个可以迭代的结果,内容为模式所匹配的字符串信息
text = "He was carefully disguised but captured quickly by police."
for m in re.finditer(r"\w+ly", text):
    print('%02d-%02d: %s' % (m.start(), m.end(), m.group(0)))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值