学习python re

普通字符:A-Z; a-z; 0-9; _等等

特殊字符:

    . 匹配任意字符

    ^ 匹配字符串的开头

    $ 匹配字符串尾    或者    匹配换行符前一个字符

    \ 转义匹配*, +, ?

    重复修饰——贪婪模式:

        * 匹配0到任意次重复

        + 匹配1到任意次重复

        ? 匹配0到1次重复

        {m} 匹配m次重复

        {m,n} 匹配m到n次重复

    重复修饰——非贪婪模式:

        *?, +?, ??

    (...) 捕捉组合:若使用捕捉分组,那么使用re.split()的时候,被匹配的文本也将出现在结果列表中

                    使用捕捉分组,那么使用re.match() re.search() re.findall()之后可以使用group()分别将每个组的内容提取出来

                    匹配之后,再用 \number 转义序列进行再次匹配

    (?:...) 非捕捉组合

    [] 匹配字符集合,任选其中一个字符进行匹配:

        字符单独列出:[anq]匹配'a', 'n', 'q'

        字符范围:[a-z]匹配小写字母, [0-9]匹配数字,-被转义或者在首位或末尾则表示-本身

        特殊字符在集合中失去特殊功能[(+*)]

    a | b 匹配a   或者   b

    \1 对前面整体重复

rpWord = re.compile(r"\s*\b(\w+)\b.*\1")    # 判断是否有重复单词
textSub = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
# 反斜杠数字比如 \3 指向前面模式的捕获组号

    \d 匹配十进制数

    \D 匹配非数字

    \s 匹配空格

    \S 匹配非空格

    \w 匹配任意字母数字[a-zA-Z0-9]

    \W 匹配非\w

    \A 匹配字符串开头

    \Z 匹配字符串开头

    \b 匹配单词边界: \b...\b界定一个单词

 

注意:

    r 原生字符: 去除python中的特殊意义

 

模块方法:

    prog = re.complie(pattern) # 保存正则对象

    result = prog.match()

 

    正则对象方法:

        re_obj = re.search(pattern, string, flags=0) # 搜索整个字符串,找到匹配样式的第一个位置

 

        re_obj = re.match(pattern, string, flags=0) # 检查字符串开头是否匹配成功,失败返回None

 

        re_obj = re.split(pattern, string, maxsplit=0, flags=0) # 用pattern分割string

 

        re_obj = re.findall(pattern, string, flags=0) # 获得匹配列表

 

        re_obj = re.sub(pattern, repl, string, count=0, flags=0) # 将string中匹配成功的pattern替换成repl

    

    标志位:

        flags = re.IGNORECASE

 

匹配对象:

    方法:

        注意:使用前要判断对象是否为空(None)    if match: ...

 

        group() 返回一个或多个匹配的子组

 

        groups() 返回匹配的元组

 

        groupdict() 返回一个字典,key为子组的组名

 

        start() end() 匹配到字串的开始索引和结束索引

    属性:

        re 返回实例的正则对象

# 匹配123.htm的字符串,域名前只有数字,不包含字母或下划线
re.compile(r"^((?![a-zA-Z_]).)+\.htm$"))

 

# 测试search和match
def test():
    s = 'Hey, Brain! Hey, Chandler! What time do you have? It is 6 clock.'
    searchObj = re.search(r'\bH\S*?\b', s)
    if searchObj:
        print('search result:', searchObj.group(), ' pos at:', searchObj.lastindex)
    matchObj = re.match(r'\bH\S*?\b', s)
    if matchObj:
        print('match result: ', matchObj.group(), ' pos at:', matchObj.pos)

# 判断字符串中是否有重复
def judgeRepeat(words):
    # 重复字符
    rpChar = re.compile(r".*(.).*\1")
    # 重复单词
    rpWord = re.compile(r"\s*\b(\w+)\b.*\1")
    ret = rpWord.search(words)
    if ret is None:
        print('No repeat...')
    else:
        print('Repeat...', ret.group(1))

# 判断变量名是否合法
def isValName(valName):
    ret = re.match('[a-zA-Z_]+[\w]*', valName)
    if ret:
        print("value name: %s legal" % valName)
    else:
        print("value name: %s non-legal" % valName)

# 使用正则表达式sub替换字符串
# 将文本中的 05/01/2020 转换成 2020-05-01
def testSub():
    text = 'Today is 05/01/2020, I have studied Python since 11/24/2019.'
    # progMatch = re.compile(r'(\d+)/(\d+)/(\d+)')
    # progReplace = re.compile(r'\3-\1-\2')
    # 反斜杠数字比如 \3 指向前面模式的捕获组号
    textSub = re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', text)
    print(textSub)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值