文档章节

python cookbook 2字符串(2)

xiaoanyunfei
 xiaoanyunfei
发布于 2015/04/17 21:02
字数 664
阅读 14
收藏 0

6搜索替代文本,忽略大小写.

为实现忽略大小写,需要使用re的re.IGNORECASE标志位

>>> text = 'UPPER PYTHON, lower python, Mixed Python'
>>> re.findall('python', text, flags=re.IGNORECASE)
['PYTHON', 'python', 'Python']
>>> re.sub('python', 'snake', text, flags=re.IGNORECASE)
'UPPER snake, lower snake, Mixed snake'

7正则表达式最小匹配

正则表达式默认是贪婪匹配,在正则匹配从左到右取值时,会尽量专区满足匹配的最长字符串.

当需要最小匹配时,用"?",可以放在"*","+","?"后面

贪婪匹配
>>> text2 = 'Computer says "no." Phone says "yes."'
>>> str_pat = re.compile(r'\"(.*)\"')
>>> str_pat.findall(text2)
['no." Phone says "yes.']
最小匹配
>>> str_pat = re.compile(r'\"(.*?)\"')
>>> str_pat.findall(text2)
['no.', 'yes.']

8正则表达式多重匹配

正则表达式中"."能匹配任意字符,除了换行符

>>> comment = re.compile(r'/\*(.*?)\*/')
>>> text1 = '/* this is a comment */'
>>> text2 = '''/* this is a
... multiline comment */
... '''
>>> comment.findall(text1)
[' this is a comment ']
>>> comment.findall(text2)
[]
这种情况下,应该在正则表达式中加入换行符
>>> comment = re.compile(r'/\*((?:.|\n)*?)\*/')
>>> comment.findall(text2)
[' this is a\nmultiline comment ']
这里(?:.|\n)定义了一个非捕捉组,如果不加?:,嵌套括号(.|\n)里的内容也会被捕捉出来,这里没有匹配,捕捉为空
>>> comment = re.compile(r'/\*((.|\n)*?)\*/')
>>> comment.findall(text2)
[(' this is a\nmultiline comment ', ' ')]
re.compile接受一个flag,re.DOTALL,可以使"."匹配任意字符,包括换行符
>>> comment = re.compile(r'/\*(.*?)\*/', re.DOTALL)
>>> comment.findall(text2)
[' this is a\nmultiline comment ']
但是,如果你的正则表达式比较复杂,或者多个独立的正则表达式组合到一起使用,可能会出现问题,
不建议使用该flag

9将Unicode转换为标准形式(仅适用python3)

3.X版本中python环境就只有unicode类型的字符串了,即所有程序中处理的都会自动转换成unicode字符串。

Unicode中某些字符可以有多种有效序列

python3默认输入是Unicode码,输出时会将Unicode转换为utf-8码
>>> s1 = 'Spicy Jalape\u00f1o'
>>> s2 = 'Spicy Jalapen\u0303o'
>>> s1
'Spicy Jalapeño'
>>> s2
'Spicy Jalapeño'
>>> s1==s2
False
这种情况下,对比字符串会出现问题,可以用unicodedata进行转换
>>> import unicodedata
>>> t1 = unicodedata.normalize('NFC', s1)
>>> t1
'Spicy Jalapeño'
>>> t2 = unicodedata.normalize('NFC', s2)
>>> t2
'Spicy Jalapeño'
>>> t1==t2
True
>>> print (t1)
Spicy Jalapeño
>>> print (ascii(t1))
'Spicy Jalape\xf1o'
>>> t3 = unicodedata.normalize('NFD', s1)
>>> t4 = unicodedata.normalize('NFD', s2)
>>> t3 == t4
True
>>> print(ascii(t3))
'Spicy Jalapen\u0303o'
normalize指明想要如何实现标准化,NFC指尽可能用单个编码符,NFD尽量用多个编码分解

10Unicode字符的正则表达式

>>> import re
>>> num = re.compile('\d+')
>>> num.match('123')
<_sre.SRE_Match object; span=(0, 3), match='123'>
>>> num.match('\u0661\u0662\u0663')#只有在python3中可以实现
<_sre.SRE_Match object; span=(0, 3), match='١٢٣'>
注意一些特例,一些Unicode无法匹配忽略大小写
>>> pat = re.compile('stra\u00dfe', re.IGNORECASE)
>>> s = 'straße'
>>> pat.match(s)
<_sre.SRE_Match object; span=(0, 6), match='straße'>
>>> pat.match(s.upper())#不匹配
>>> s.upper()
'STRASSE'


© 著作权归作者所有

xiaoanyunfei
粉丝 0
博文 12
码字总数 11094
作品 0
海淀
私信 提问
那些年,我们读过的python!

Python是一个强大、快速、易学、友好、开源的脚本语言。Hacker必备的语言之一。 Python - 历史由来 Python 是一种开源的面向对象的脚本语言,它起源于1989年末,当时,CWI(阿姆斯特丹国家数...

生气的散人
2014/03/21
1K
2
用python来解析xml文件(简单情况)

首先,sax解析最直观,当然,也可以容许xml文件出些错。 先给定一个xml文件book.xml, < catalog > < book isbn ="0-596-00128-2" > < title > Python & XML < author > Jones, Drake < book ......

晨曦之光
2012/04/12
408
0
《Python Cookbook》第三版中文版发布

人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上...

一刀
2015/12/29
7.1K
65
《Python Cookbook》第三版中文版

人生苦短,我用 python! 我一直坚持使用 python3,因为它代表了python的未来。虽然向后兼容是它的硬伤,但是这个局面迟早会改变的, 而且python3的未来需要每个人的帮助和支持。 目前市面上...

一刀
2015/01/07
58.7K
42
python 字符串的translate方法

最近在学习Python cookbook,遇到字符串的translate方法,发现功能很强大,但有点难以理解,于是在网上查阅资料和官方文档,记下自己的理解,有误的地方,请多多指教。 translate的用法如下:...

jackliu8722
2012/07/12
4.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

c++ 内联函数调用快的原因

见图片分析

天王盖地虎626
41分钟前
3
0
JS--function

一、声明提前(hoist) 在js程序开始执行前,引擎会查找所有var声明的变量和function声明的函数,集中到当前作用域顶部集中创建,赋值留在原地 二、三种创建函数的方式 1、声明方式创建函数-...

wytao1995
今天
5
0
微服务之间调用控制器注解类型的差异

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题: 1. 提示http请求头过大的问题; 此时需要修改bootstrap.yml,加入 server: max-http-header-size: 10000000 用以放大...

不再熬夜
今天
7
0
用 4G 工作是什么体验

七月开始,因为工作原因,在公司附近租了个住处,方便工作。离公司近了,感觉就是不一样,之前每天 5:30 就要起床赶地铁,现在可以睡到自然醒,一看才 7 点,悠闲的起床洗漱,踱步到公司,都...

zzxworld
今天
6
0
sonar报错volatile

问题发生 原先代码如下: //认证授权码private static volatile String AUTHORIZATION_CODE = "init"; git push 之后,sonar认为这是个bug检测报告截图如下: 分析排查 解释说明: Markin...

开源小菜鸟2333
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部