试试这个字符串处理入门备忘单,以了解使用 Python 在基本级别上操作和处理字符串。
微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩
自然语言处理和文本分析是目前研究和应用的热门领域。这些领域需要各种特定的技能和概念,在进入有意义的实践之前需要彻底理解。然而,在达到这一点之前,基本的字符串操作和处理是必须的。
在我看来,有两种不同类型的广泛的计算字符串处理技能需要学习。其中第一个是 正则表达式 ,一种基于模式的文本匹配方法。可以搜索到许多关于正则表达式的精彩介绍,但视觉学习者可能会欣赏有关该主题的 fast.ai 代码优先自然语言处理介绍课程视频 。
另一个独特的计算字符串处理技能是能够利用给定编程语言的标准库进行基本的字符串操作。因此,本文是一个简短的 Python 字符串处理入门。
请注意,有意义的文本分析远远超出了字符串处理,这些更高级技术的核心可能不需要您经常自己操作文本。但是,文本数据处理是成功的文本分析项目中重要且耗时的部分,而上述这些字符串处理技能在这里将是无价之宝。在基本层面上理解文本的计算处理对于理解更高级的文本分析技术在概念上也非常重要。
以下许多示例都使用了 Python 标准库 字符串模块 ,因此方便参考是个好主意。
Python 字符串处理备忘单
去除空格 是基本的字符串处理要求。您可以使用 lstrip()方法(左),尾随空格 rstrip()(右),前导和尾随 strip().
s = ' This is a sentence with whitespace. \n'
print('Strip leading whitespace: {}'.format(s.lstrip()))
print('Strip trailing whitespace: {}'.format(s.rstrip()))
print('Strip all whitespace: {}'.format(s.strip()))
Strip leading whitespace: This is a sentence with whitespace.
Strip trailing whitespace: This is a sentence with whitespace.
Strip all whitespace: This is a sentence with whitespace.
有兴趣剥离除空格以外的字符吗?相同的方法很有帮助,并通过传入要剥离的字符来使用。
s = 'This is a sentence with unwanted characters.AAAAAAAA'
print('Strip unwanted characters: {}'.format(s.rstrip('A')))
Strip unwanted characters: This is a sentence with unwanted characters.
不要忘记检查字符串 format()必要时提供文件。
将字符串拆分为较小的子字符串列表通常很有用,并且在 Python 中很容易通过 split()方法。
s = 'KDnuggets is a fantastic resource'
print(s.split())
['KDnuggets', 'is', 'a', 'fantastic', 'resource']
默认, split()在空格上拆分,但也可以传入其他字符序列。
s = 'these,words,are,separated,by,comma'
print('\',\' separated split -> {}'.format(s.split(',')))
s = 'abacbdebfgbhhgbabddba'
print('\'b\' separated split -> {}'.format(s.split('b')))
',' separated split -> ['these', 'words', 'are', 'separated', 'by', 'comma']
'b' separated split -> ['a', 'ac', 'de', 'fg', 'hhg', 'a', 'dd', 'a']
需要与上述相反的操作吗?您可以使用 Python 将列表元素字符串连接成单个字符串 join()方法。
s = ['KDnuggets', 'is', 'a', 'fantastic', 'resource']
print(' '.join(s))
KDnuggets is a fantastic resource
这不就是事实吗!如果你想在列表元素之间加入空格以外的东西?这件事可能有点陌生,但也很容易做到。
s = ['Eleven', 'Mike', 'Dustin', 'Lucas', 'Will']
print(' and '.join(s))
Eleven and Mike and Dustin and Lucas and Will
Python 没有内置的字符串反转方法。然而,考虑到字符串可以像列表一样被 切片 ,反转一个可以以与反转列表元素相同的简洁方式完成。
s = 'KDnuggets'
print('The reverse of KDnuggets is {}'.format(s[::-1]))
The reverse of KDnuggets is: steggunDK
案例之间的转换可以通过 upper(), lower(), 和 swapcase()方法。
s = 'KDnuggets'
print('\'KDnuggets\' as uppercase: {}'.format(s.upper()))
print('\'KDnuggets\' as lowercase: {}'.format(s.lower()))
print('\'KDnuggets\' as swapped case: {}'.format(s.swapcase()))
'KDnuggets' as uppercase: KDNUGGETS
'KDnuggets' as lowercase: kdnuggets
'KDnuggets' as swapped case: kdNUGGETS
在 Python 中检查字符串成员的最简单方法是使用 in操作员。语法非常类似于自然语言。
s1 = 'perpendicular'
s2 = 'pen'
s3 = 'pep'
print('\'pen\' in \'perpendicular\' -> {}'.format(s2 in s1))
print('\'pep\' in \'perpendicular\' -> {}'.format(s3 in s1))
'pen' in 'perpendicular' -> True
'pep' in 'perpendicular' -> False
如果您对在字符串中查找子字符串的位置更感兴趣(而不是简单地检查是否包含子字符串),那么 find() 字符串方法会更有帮助。
s = 'Does this string contain a substring?'
print('\'string\' location -> {}'.format(s.find('string')))
print('\'spring\' location -> {}'.format(s.find('spring')))
'string' location -> 10
'spring' location -> -1
find()默认情况下返回子字符串第一次出现的第一个字符的索引,并返回 -1如果未找到子字符串。检查文档以了解对此默认行为的可用调整。
如果你想 替换 子字符串,而不是仅仅找到它们怎么办?蟒蛇 replace()string 方法会解决这个问题。
s1 = 'The theory of data science is of the utmost importance.'
s2 = 'practice'
print('The new sentence: {}'.format(s1.replace('theory', s2)))
The new sentence: The practice of data science is of the utmost importance.
如果相同的子字符串多次出现,可选的 count 参数可以指定要进行的最大连续替换次数。
有多个要以某种元素方式组合在一起的字符串列表吗?没有问题 zip()功能。
countries = ['USA', 'Canada', 'UK', 'Australia']
cities = ['Washington', 'Ottawa', 'London', 'Canberra']
for x, y in zip(countries, cities):
print('The capital of {} is {}.'.format(x, y))
The capital of USA is Washington.
The capital of Canada is Ottawa.
The capital of UK is London.
The capital of Australia is Canberra.
想检查一对字符串是否是彼此的字谜?从算法上讲,我们需要做的就是计算每个字符串中每个字母的出现次数,并检查这些次数是否相等。这很简单,使用 Counter的类 collections模块 。
from collections import Counter
def is_anagram(s1, s2):
return Counter(s1) == Counter(s2)
s1 = 'listen'
s2 = 'silent'
s3 = 'runner'
s4 = 'neuron'
print('\'listen\' is an anagram of \'silent\' -> {}'.format(is_anagram(s1, s2)))
print('\'runner\' is an anagram of \'neuron\' -> {}'.format(is_anagram(s3, s4)))
'listen' an anagram of 'silent' -> True
'runner' an anagram of 'neuron' -> False
如果你想检查给定的单词是否是回文呢?从算法上讲,我们需要创建单词的反转,然后使用 ==运算符来检查这 2 个字符串(原始字符串和反向字符串)是否相等。
def is_palindrome(s):
reverse = s[::-1]
if (s == reverse):
return True
return False
s1 = 'racecar'
s2 = 'hippopotamus'
print('\'racecar\' a palindrome -> {}'.format(is_palindrome(s1)))
print('\'hippopotamus\' a palindrome -> {}'.format(is_palindrome(s2)))
'racecar' is a palindrome -> True
'hippopotamus' is a palindrome -> False
参考文章:https://www.kdnuggets.com/2020/01/python-string-processing-primer.html
https://item.jd.com/13284890.html
《Python从入门到精通(第2版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分23章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、异常处理及程序调试、文件及目录操作、操作数据库、GUI界面编程、Pygame游戏编程、网络爬虫开发、使用进程和线程、网络编程、Web编程、Flask框架、e起去旅行网站、AI图像识别工具等内容。所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。除此之外,该书还附配了243集高清教学微视频及PPT电子教案。
《Python从入门到精通(第2版)》可作为软件开发入门者的学习用书,也可作为高等院校相关专业的教学参考用书,还可供开发人员查阅、参考使用。
这本书有如下特色:
循序渐进,实战讲述
243集教学微课视频,39小时知识点精讲,可听可看,随时随地扫码学
趣味解读,易教易学
赠送Python实战训练背记手册
在线解答,高效学习
企业QQ、QQ群在线答疑,明日学院社区答疑。
每周清大文森学堂在线直播答疑。
精彩回顾
Python是如何跑起来的?从字节码说起
【案例】如何使用Flask构建天气预报
手把手教你创建简单的Python Flask
微信搜索关注《Python学研大本营》
访问【IT今日热榜】,发现每日技术热点