Python3 CookBook | 字符串和文本

简介: 字符串操作在程序中的出现频率相当高,包括分割,替换,拼接等等,这篇文章介绍五个最常遇到的问题,希望给你带来一些思考。

1、使用多个界定符分割字符串


分割字符串属于字符串最基本的操作了,直接用 split() 即可。


In [88]: a = 'a,b,c,c'
In [89]: a.split(',')
Out[89]: ['a', 'b', 'c', 'c']
复制代码


如果一个字符串包含多个不同的分隔符呢?当然可以用 split() 进行多次分割,但这显然比较麻烦,这时候用 re.split() 是更好的解决办法。


In [90]: a = 'a,b c:d,e'
In [91]: import re
In [92]: re.split(r'[,| |:]', a)
Out[92]: ['a', 'b', 'c', 'd', 'e']
复制代码


re.split() 函数的第一个参数可以根据你的需要,写出符合要求的正则表达式。


2、字符串开头或结尾匹配


解决这个问题可以有很多种方法。

第一可以使用切片操作,截取出字符串和要求字符串进行比较;第二可以使用 re.march() 函数,通过写正则表达式,检查匹配结果来达到比较目的。

这里介绍两个更简单的函数 startswith() 和 endswith()。


In [93]: a = 'hello.py'
In [94]: a.endswith('.py')
Out[94]: True
In [95]: a.startswith('h')
Out[95]: True
复制代码


需要注意的是,如果要一次比较多个字符串,所传入的参数必须是元组,否则会报错。


In [96]: names = ['a.txt', 'b.py', 'c', 'd.py']
In [97]: [name for name in names if name.endswith('.py')]
Out[97]: ['b.py', 'd.py']
In [98]: [name for name in names if name.endswith('.py', '.txt')]
-----------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-98-900fc5940b5c> in <module>()
> 1 [name for name in names if name.endswith('.py', '.txt')]
<ipython-input-98-900fc5940b5c> in <listcomp>(.0)
> 1 [name for name in names if name.endswith('.py', '.txt')]
TypeError: slice indices must be integers or None or have an __index__ method
In [99]: [name for name in names if name.endswith(('.py', '.txt'))]
Out[99]: ['a.txt', 'b.py', 'd.py']
复制代码


再来看另一种情况,我们用 Linux 系统 shell 命令时,很喜欢用通配符,比如 ls *.py 来查看文件夹下所有 Python 文件。

在程序中也有两个函数,fnmatch() 和 fnmatchcase() 来支持这种通配符的操作方式。


In [100]: from fnmatch import fnmatch, fnmatchcase
In [101]: fnmatch('a.py', '*.py')
Out[101]: True
复制代码


由于不同的操作系统,对于模式大小写匹配规则是不一样的,所以 fnmatchcase() 函数的作用就是完全按照模式大小写来匹配。


3、字符串搜索和替换


对于简单的模式,直接使用 replace() 函数即可。


In [102]: a = 'hello world'
In [103]: a.replace('hello', 'go')
Out[103]: 'go world'
复制代码


如果是复杂的模式,可以使用 re.sub() 函数。比如你想把 ’11/30/2017’ 转换成 ’2017-11-30‘。


In [104]: a = 'time is 11/30/2017'
In [106]: re.sub(r'(\d+)/(\d+)/(\d+)', r'\3-\1-\2', a)
Out[106]: 'time is 2017-11-30'
复制代码


sub() 函数第一个参数表示原字符串匹配模式,第二个参数是希望转换成的模式,反斜杠 3 为前面获取的组号。

其实这种解决方法归根结底还是考验对正则表达式理解程度,如果对正则表达式很熟悉的话,解决这类问题会很轻松。

我刚开始工作时用的语言是 Perl,这个语言对文本处理相当强悍,用的最多的就是正则表达式,写起来也很方便,当时写过很多很复杂的正则。后来开始写 Python 之后,感觉写正则好麻烦,很不习惯。


4、最短匹配和多行匹配模式


这两个操作所要注意的就两个方面。

第一,当使用 .* 进行匹配时,所采用的模式为贪婪匹配,如果想要结果为最短匹配,需要写成非贪婪匹配:.*?。

第二,点号是不能匹配换行符的,所以在进行多行匹配时,要写成:[.|\n]。


5、字符串格式换


首先说说字符串拼接,如果简单拼接两个字符串,加号便可以轻松搞定。


In [110]: a = 'hello'
In [111]: b = 'world'
In [112]: a + ' ' + b
Out[112]: 'hello world'
复制代码


如果拼接一个列表中的字符串呢?可以用 join() 函数。


In [113]: a = ['I', 'have', 'a', 'dream']
In [114]: ' '.join(a)
Out[114]: 'I have a dream'
复制代码


再来看看这类替换操作:


In [115]: a = '{name} is {age}'
In [116]: a.format(name='Tom', age=18)
Out[116]: 'Tom is 18'
复制代码


其实 format() 函数还有很多功能,比如打印的时候就常用它来格式化,有兴趣可以进行更多了解。

未完待续。。。


目录
相关文章
|
10天前
|
Python
python获取字符串()里面的字符
在Python中,如果你想获取字符串中括号(比如圆括号`()`、方括号`[]`或花括号`{}`)内的字符,你可以使用正则表达式(通过`re`模块)或者手动编写代码来遍历字符串并检查字符。 这里,我将给出使用正则表达式的一个例子,因为它提供了一种灵活且强大的方式来匹配复杂的字符串模式。 ### 使用正则表达式 正则表达式允许你指定一个模式,Python的`re`模块可以搜索字符串以查找匹配该模式的所有实例。 #### 示例:获取圆括号`()`内的内容 ```python import re def get_content_in_parentheses(s): # 使用正则表达
64 36
|
6天前
|
Linux 开发者 iOS开发
Python中使用Colorama库输出彩色文本
Python中使用Colorama库输出彩色文本
|
9天前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
36 6
|
7天前
|
网络协议 网络安全 开发者
Python 向IP地址发送字符串
Python 向IP地址发送字符串
23 2
|
7天前
|
Python
Python 中取字符串中等于号后面的内容
Python 中取字符串中等于号后面的内容在编程过程中,我们经常需要从字符串中提取特定的信息。一个常见的任务是在给定的字符串中查找等于号(=)后面的内容。这种需求在解析配置文件、处理查询字符串或分析日志数据时尤其常见。 如何实现 在Python中,我们可以使用多种方法来实现此功能。以下是几种常用的方法,包括字符串操作和正则表达式。 方法 1:使用字符串分割 我们可以使用字符串的 split() 方法将字符串拆分为两个部分,然后提取等于号后的值。 示例代码 ----------------------------------- ©著作权归作者所有:来自51CTO博客作者bruce_xiao
18 1
|
19天前
|
XML 数据格式 Python
Python技巧:将HTML实体代码转换为文本的方法
在选择方法时,考虑到实际的应用场景和需求是很重要的。通常,使用标准库的 `html`模块就足以满足大多数基本需求。对于复杂的HTML文档处理,则可能需要 `BeautifulSoup`。而在特殊场合,或者为了最大限度的控制和定制化,可以考虑正则表达式。
23 12
|
15天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
20 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
20天前
|
机器学习/深度学习 自然语言处理 算法
使用Python实现简单的文本情感分析
【9月更文挑战第13天】本文将介绍如何使用Python编程语言进行基础的文本情感分析。我们将通过一个简单的例子,展示如何利用自然语言处理库nltk和机器学习库sklearn来实现对文本数据的情感倾向性判断。文章旨在为初学者提供一个入门级的指导,帮助他们理解并实践文本情感分析的基本步骤和方法。
22 6
|
5天前
|
物联网 Python
python向IP地址发送字符串
python向IP地址发送字符串
14 0
|
6天前
|
JSON 数据格式 Python
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
6-1|Python如何将json转化为字符串写到文件内 还保留json格式
下一篇
无影云桌面