博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python正则表达式中的 compile,search,group,groups 函数的简单说明
阅读量:3634 次
发布时间:2019-05-21

本文共 3087 字,大约阅读时间需要 10 分钟。

Python正则表达式中的 compile,search,group,groups 函数的简单说明

2013年12月04日 
⁄ 综合 ⁄ 共 306字 ⁄ 字号 
小 中 大 
⁄ 评论关闭
id="iframeu1788635_0" src="http://pos.baidu.com/jcsm?rdid=1788635&dc=2&di=u1788635&dri=0&dis=0&dai=2&ps=236x1186&dcb=BAIDU_SSP_define&dtm=BAIDU_DUP_SETJSONADSLOT&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1467184976401&ti=Python%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E7%9A%84%20compile%2Csearch%2Cgroup%2Cgroups%20%E5%87%BD%E6%95%B0%E7%9A%84%E7%AE%80%E5%8D%95%E8%AF%B4%E6%98%8E%20%7C%20%E5%AD%A6%E6%AD%A5%E5%9B%AD&ari=1&dbv=2&drs=1&pcs=1920x951&pss=1920x256&cfv=0&cpl=5&chi=1&cce=true&cec=UTF-8&tlm=1467184976&rw=951&ltu=http%3A%2F%2Fwww.xuebuyuan.com%2F1537257.html&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DaaaHCH3u7r9fXco4zM4XsXI2KahntPv1RSIgpVetbomxPI6ajFWN6xXpIKVpc3KL%26wd%3D%26eqid%3Dac43dd07000636af0000000357737746&ecd=1&psr=1920x1080&par=1920x1080&pis=-1x-1&ccd=24&cja=false&cmi=7&col=zh-CN&cdo=-1&tcn=1467184977&qn=b71d7763a4d1d7a1&tt=1467184976361.159.359.361" width="336" height="280" align="center,center" vspace="0" hspace="0" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true" style="margin: 0px; padding: 0px; border-width: 0px; border-style: initial; vertical-align: bottom; background: transparent;">

以此为例:regex = re.compile('\((.*)\)')

里面嵌套的那对括号是用于识别group的,所以至多有group(1);

compile是编译正则表达式,生成pattern对象;

pattern.search(S)就是在字符串S中寻找匹配之前生成pattern的子串;

而group和groups是两个不同的函数:

一般,m.group(N) 返回第N组括号匹配的字符。

m.group() == m.group(0) == 所有匹配的字符,与括号无关,这个是API规定的。

m.groups() 返回所有括号匹配的字符,以tuple格式

m.groups() == (m.group(1), m.group(2), ...)

在 
看到

m = re.match(r"(..)+", "a1b2c3")  # Matches 3 times.m.group(1)                        # Returns only the last match.'c3'm.group(0)'a1b2c3'm.groups()('c3',)

注意到pattern中的+,应该是匹配偶数个字符.
1.首先是match的问题.match是从开头匹配,为什么会匹配到c3呢?
2.group(0)是整个匹配项,为什么groups()中没有呢?

  •  
  •  

3 个回答

1
采纳

1) 从group的角度考虑,整个表达式应该写作((..)+)。所以最高一层group(0)匹配整个字符串。
2) 先说第二个问题,按照文档的描述的行为,group()是列出从编号1开始的所有group,而给定的表达式只有一个group,所以自然就是c3了
3) 好,最后是为什么group(1)是c3。如果你的正则表达式没有那个“+”,那么它就只匹配a1。而有了“+”之后,每匹配到一个“(..)”就会放到group(1)中。所以跑完整个字符串,group(1)就存进了c3

我猜你其实想问“字符串中明明有三个符合(..)的,但为什么只出现了最后一个呢?”原因是,group说的是正则表达式中的括号,而不是字符串中符合括号内pattern的子串。

encode 函数
def py_encode_basestring_ascii(s):
    """Return an ASCII-only JSON representation of a Python string
    """
    if isinstance(s, str) and HAS_UTF8.search(s) is not None:
        s = s.decode('utf-8')
    def replace(match):
        s = match.group(0)
        try:
            return ESCAPE_DCT[s]
        except KeyError:
            n = ord(s)
            if n < 0x10000:
                return '\\u{0:04x}'.format(n)
                #return '\\u%04x' % (n,)
            else:
                # surrogate pair
                n -= 0x10000
                s1 = 0xd800 | ((n >> 10) & 0x3ff)
                s2 = 0xdc00 | (n & 0x3ff)
                return '\\u{0:04x}\\u{1:04x}'.format(s1, s2)
                #return '\\u%04x\\u%04x' % (s1, s2)
    return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
可见输出json_dumps(ensure_asscii=false)输出的是utf-16形式的字符串
python 中
类似 直接先转换成utf-16 全部显示成\\u格式 (包括<=127)区别php
php中(json.c)文件
首先转换为utf-16编码 unsigned short *a[]
如果某个元素<=127 则直接append到output中
否则 一律\\u..输出 意味着 utf-16字符集存储编码中 单个word可能输出\u 或者 asscii字符,两个word(110110 110111后跟10位)一定大于127 必然输出 \\u格式

转载地址:http://zxgun.baihongyu.com/

你可能感兴趣的文章
2019/07/24 git server(05)
查看>>
2019/07/24 搜索引擎及ES概述(01)
查看>>
2019/07/29 Linux容器和lxc(01)
查看>>
2019/07/31 docker容器和镜像(03)容器部分
查看>>
Dubbo与spi扩展
查看>>
微服务面试笔记
查看>>
SpringCloud-基础设施即服务day3-Docker上
查看>>
SpringCloud-基础设施即服务day4-Docker中
查看>>
SpringCloud-基础设施即服务day5-DockerCompose
查看>>
SpringCloud-平台即服务day6-GitLab
查看>>
SpringCloud-平台即服务day7-Nexus和Registry
查看>>
Spring Security oAuth2
查看>>
2021网易游戏雷火2021春招游戏功能测试工程师 笔试记录----春招补录
查看>>
完全理解Docker安装软件,只需三步!
查看>>
整体学习Spring的Bean生命周期(上帝视角)
查看>>
Redis分布式锁逐步完善过程,最后推荐Redisson框架
查看>>
区块链11-区块链去中心化应用开发4-DAPP实战-应用介绍及前置知识
查看>>
Vue2.x中使用Bus遇到的问题及解决方法
查看>>
TypeScript从入门到精通(一)准备工作
查看>>
TypeScript从入门到精通(二)静态类型
查看>>