python 正则表达式


python正则表达式

re 所定义的 flag 包括:
re.I (re.IGNORECASE) 忽略大小写
re.L (LOCALE)(MULTILINE) 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M (MULTILINE) 多行模式
re.S (DOTALL) 即为’ . ’并且包括换行符在内的任意字符(’ . ’不包括换行符)
re.U (UNICODE) 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X (VERBOSE) 为了增加可读性,忽略空格和’ # ’后面的注释

以下两个正则表达式是等价的:

regex_1 = re.compile(r"""\d +  # 数字部分
                         \.    # 小数点部分
                         \d *  # 小数的数字部分""", re.X)
regex_2 = re.compile(r"\d+\.\d*")

正则表达式验证工具:https://regex101.com/
系统学习:https://www.regular-expressions.info/
参考资料:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonre/index.html

re.match方法

import re
m = re.match(r'(\w+)(\w+)(?P<sign>.*)','hello world!')
# 字符串
print(m.string)
#  正则
print(m.re)
# 匹配的起始位置
print(m.pos)
# 匹配的终止位置
print(m.endpos)
# 最后一个分组的序号
print(m.lastindex)
# 最有一个分组的别名
print(m.lastgroup)
# 分组,1,2,和‘sign’
print(m.group(1,2,'sign'))
# 分组1,2,3
print(m.group(1,2,3))
# 元组: 所有分组
print(m.groups())
# 字典:有别名的分组
print(m.groupdict())
# 分组2的起始位置
print(m.start(2))
# 分组2的终止位置
print(m.end(2))
# 分组2的跨度
print(m.span(2))
# 调整分组的位置,将匹配到的分组代入template中然后返回。
# template中可以使用\id或\g、\g引用分组,但不能使用编号0。\id与\g是等价的;
# 但\10将被认为是第10个分组,如果你想表达\1之后是字符'0',只能使用\g<1>0。
print(m.expand(r'\2 \1\3'))

利用pattern对象进行字符串的匹配

import re
p = re.compile(r'(\w+)(\w+)(?P<sign>.*)',re.DOTALL) #  即为’ . ’并且包括换行符在内的任意字符
print(p.pattern)
print(p.flags)
print(p.groups)
print(p.groupindex)
# 利用match()方法进行字符串的匹配
import re
pattern = re.compile(r'How.*')
match = pattern.match('How are you?')
if match:
    print(match.group())
# 利用search()方法进行字符串的匹配
import re
pattern = re.compile(r'H.*s')
match = pattern.search('lalalaHello,James')
if match:
    print(match.group())
# 正则表达式分割字符串
import re
p = re.compile(r'\d+')
print(p.split('asdasd1asdasd2asdsad3'))
# 正则表达式找到所有匹配项且返回为列表或者迭代器
import re
p = re.compile(r'\d+')
print(p.findall('one1two2three3four4'))

for m in p.finditer('one1two2three3four4'):
    print(m.group())
# 正则表达式进行替换
import re
p = re.compile(r'(\w+)(\w+)')
s = 'hello, my name is James. What\'s your name?'
# 使用repl替换string中每一个匹配的子串后返回替换后的字符串
print(p.sub(r'\2 \1',s))


# 当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 
# count用于指定最多替换次数,不指定时全部替换。
def func(m):
    # title() 首字母大写
    return m.group(1).title() + ' ' + m.group(2).title()
print(p.sub(func,s))
# 返回字符串和替换的次数
print(p.subn(r'\2 \1',s))
总结:
  1. pattern可以用来匹配元素
  2. pattern可以用来匹配子元素
  3. pattern可以用来分割字符串
  4. pattern可以用来得到所有匹配项
  5. pattern可以用来字符串替换
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值