作者:马修·梅奥

翻译:陈之炎

校对:和中华

本文约1600字,建议阅读7分钟。

本文为你介绍利用Python处理字符串的一些基本操作。

在探寻文本分析途径时却不知从何下手,该怎么办?那么可以通过这个字符串处理入门教程,来了解一下利用Python处理字符串的一些基本操作。

当前,自然语言处理和文本分析是研究和应用的热点领域。这些领域包括各种具体的技能和概念,在深入具体实践之前需要对它们有彻底的理解,为此,必须掌握一些基本的字符串操作和处理技巧。

在我看来,必须掌握两种字符串处理技巧:首先是正则表达式,一种基于模式的文本匹配方法。关于正则表达式有许多精彩的介绍,但是喜欢通过视频学习的朋友仍然可以从这个视频中受益良多:

fast.ai代码 -初涉自然语言处理:

https://youtu.be/Q1zLqfnEXdw?list=PLtmWHNX-gukKocXQOkQjuVxglSDYWsSh9&t=630

另一个必备的字符串处理技能是:能够利用给定编程语言的标准库进行基本的字符串操作。为此,本文便是一个简短的Python字符串处理入门教程,旨在为那些以文本分析作为职业的人士寻求更为深入的研究,抛砖引玉。

想对公司所有的文本有深入理解,发掘出其中的价值吗?首先,应了解最基本的基础知识,下面,来了解一下这些初学者的技巧。

注意,有实际意义的文本分析远远超出字符串处理的范畴,那些更先进的核心技术可能不需要你频繁的亲自对文本进行操作。然而,对于一个成功的文本分析项目来说,文本数据预处理是非常重要而耗时的环节,所以,本文涵盖的字符串处理技能将很有价值。在基础层面上理解文本的计算处理对于理解更为先进的文本分析技术同样重要。

文中的一些示例使用Python标准库:string module字符串模块,为此,最好准备好string module以备参考。

string module字符串模块链接:

https://docs.python.org/2/library/string.html

1. 空格剥离

空格剥离是字符串处理的一种基本操作,可以使用lstrip()方法(左)剥离前导空格,使用rstrip()(右)方法对尾随空格进行剥离,以及使用strip()剥离前导和尾随空格。

s = ' This is a sentence with whitespace. '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()文档。

format()文档:

https://docs.python.org/3/library/stdtypes.html#str.format

2. 字符串拆分

利用Python中的 split() 方法可以轻易将字符串拆分成较小的子字符串列表。

split() 方法:

https://docs.python.org/3/library/stdtypes.html#str.split

s = 'KDnuggets is a fantastic resource'print(s.split())
['KDnuggets', 'is', 'a', 'fantastic', 'resource']

默认情况下,split()根据空格进行拆分,但同样也可以将其他字符序列传递给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']

3. 将列表元素合成字符串

需要实现上述操作的一个逆向操作?没问题,利用Python中的join()方法便可将列表中的元素合成一个字符串。

join()方法:

https://docs.python.org/3/library/stdtypes.html#str.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

4. 字符串反转

Python没有内置的字符串反转方法。但是,可以先将字符串看做是字符的列表,再利用反转列表元素的方式进行反转。

5. 大小写转换

利用upper(), lower(),和swapcase()方法可以进行大小写之间的转换。

upper()方法:

https://docs.python.org/3/library/stdtypes.html#str.upper

lower()方法:

https://docs.python.org/3/library/stdtypes.html#str.lower

swapcase()方法:

https://docs.python.org/3/library/stdtypes.html#str.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

6. 检查是否有字符串成员

在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。对这一默认情况拿捏不准时,可以查阅一下相关文档。

7. 子字符串替换

找到子字符串之后,如果想替换这一子字符串,该怎么办?Python 中的replace()字符串方法将解决这一问题。

replace()字符串方法:

https://docs.python.org/3/library/stdtypes.html#str.replace

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

如果同一个子字符串出现多次的话,利用计数参数这一选项,可以指定要进行连续替换的最大次数。

8. 组合多个列表的输出

如何以某种元素的方式将多个字符串列表组合在一起?利用zip()函数便没问题。

zip()函数:

https://docs.python.org/3/library/functions.html#zip

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

9. 同字母异序词检查

想检查一对字符串中,其中一个字符串是否是另一个字符串的同字母异序词?从算法上来讲,需要做的是对每个字符串中每个字母的出现次数进行计数,再检查二者计数值是否相等,直接使用collections模块的Counter类便可实现。

collections模块的Counter类:

https://docs.python.org/3/library/collections.html#collections.Counter

from collections import Counterdef 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

10. 回文检查

如果想检查给定的单词是否是回文,怎么办?从算法上看,需要创建一个单词的反转,然后利用 == 运算符来检查这2个字符串(原始字符串和反向字符串)是否相等。

def is_palindrome(s): reverse = s[::-1] if (s == reverse): return True return Falses1 = '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

虽然掌握这些字符串处理“技巧”之后,并不意味着你已经成为了文本分析或自然语言处理专家,但这些技巧可能会激发出深入探究自然语言处理领域的兴趣,并掌握最终成为专家所必备的技能。

相关文献:

文本数据预处理:Python演练https://www.kdnuggets.com/2018/03/text-data-preprocessing-walkthrough-python.html

Python中的·文本预处理:步骤、工具和示例https://www.kdnuggets.com/2018/11/text-preprocessing-python.html

文本数据分析完整探索与可视化:可视化与NLP相结合https://www.kdnuggets.com/2019/05/complete-exploratory-data-analysis-visualization-text-data.html

原文标题:

10 Python String Processing Tips & Tricks

原文链接:

https://www.kdnuggets.com/2020/01/python-string-processing-primer.html

译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步。

—完—

关注清华-青岛数据科学研究院官方微信公众平台“ THU数据派 ”及姊妹号“ 数据派THU ”获取更多讲座福利及优质内容。

python split()方法_秘籍:10个Python字符串处理技巧(附代码)相关推荐

  1. python split()方法_聊聊 Python 的单元测试框架(一):unittest

    本文首发于 HelloGitHub 公众号,并发表于 Prodesire 博客. 前言 说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest. ...

  2. python稳健性检验_风控模型6大核心指标(附代码)

    欢迎各位同学学习python金融风控评分卡模型和数据分析微专业课 在我们开发完信用分模型后,经常需要计算如下的一些指标:●      区分度的指标:○      AUC○      KS○       ...

  3. python安装方法_听说你安装Python包很慢,试试这个方法

    使用Python有快五年了,最近这一年多,经常听到大家说在安装python第三方包很慢很慢.比如这速度,每秒十几kb而网络正常的情况下,pip下载的速度至少应该每秒几百kb才对,甚至还有可能更快,比如 ...

  4. python中字符串类型的encode()方法_第五章 Python字符串常用方法详解

    5.1 Python字符串拼接(包含字符串拼接数字) 在 Python中拼接(连接)字符串很简单,可以直接将两个字符串紧挨着写在一起,具体格式为: strname = "str1" ...

  5. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  6. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  7. 我用Python爬取了难下载的电子教材(内附代码)

    我用Python爬取了难下载的电子教材(内附代码) 第一次在CSDN上面分享经历,有点激动.本大二狗最近这段时间去不了学校又想看教材,不巧学习通上面的部分内容老师设置了不可下载啊.好在最近学习了一点P ...

  8. python程序员职业考试_最新10大Python面试常问的问题,60%的人都不会

    Python是个非常受欢迎的编程语言,随着近些年机器学习.云计算等技术的发展,Python的职位需求越来越高.下面我收集了10个Python面试官经常问的问题,供大家参考学习. 类继承 有如下的一段代 ...

  9. 如何提高python的运行效率_几个提升Python运行效率的方法之间的对比

    在我看来,python社区分为了三个流派,分别是python 2.x组织,3.x组织和PyPy组织.这个分类基本上可以归根于类库的兼容性和速度.这篇文章将聚焦于一些通用代码的优化技巧以及编译成C后性能 ...

最新文章

  1. 新来了个技术总监:谁再用 @Async 创建线程以后就不用来了!!
  2. 为什么人人都该懂点LLVM
  3. 8086寄存器组织结构
  4. 怎样使用AutoLayOut为UIScrollView添加约束
  5. sql中count(1)、count(*)和count(字段名)的区别
  6. 写python代码的心得体会_写python代码的一点感想
  7. js日期操作,某天的N天后,一个月后的日期
  8. 模块 datetime
  9. android 恢复出厂设置流程
  10. paip.提升效率--gui 的选择--swing最佳实践swt awt
  11. JavaScript-RegExp及String的正则表达式处理方法
  12. java获取世界各国地址,获取世界各国、全国省份、城市、县
  13. 【无极低码】手写一个低代码平台之二次开发Java
  14. 小白学python——程序结构
  15. php 配置 error_reporting,关于php中的错误配置display_errors与error_reporting说明
  16. word模板中添加图片
  17. 打印不超过n的自恋数(水仙花数)C语言实现
  18. 为什么普遍用Linux做服务器?
  19. Oracle报“无监听程序”解决方案
  20. 快速搭建kodexplorer+OnlyOffice私有云办公平台

热门文章

  1. Java黑皮书课后题第3章:3.2(游戏:将三个数相加)程序清单3-1中的程序产生2个整数并提示用户输入这两个整数的和。修改该程序使之能产生三个个位数整数,提示用户输入这三个整数的和
  2. linux下什么文件不能修改,Linux和Unix下root也不能修改文件与目录的命令
  3. 【2012百度之星/初赛上】A:度度熊就是要第一个出场
  4. Halcon - 测量 - 轮廓到线的距离
  5. pycharm在401跑程序需要每个py文件加一句
  6. jquery ajax POST/GET 请求至 ASP.NET WebAPI
  7. bash: /opt/hisi-linux/x86-arm/arm-hisiv300-linux/target/bin/arm-hisiv300-linux-gcc: 没有那个文件或目录。...
  8. 浅析“字典--NSDirctionary”理论
  9. 你可以不知道原因,但是,我们不能停止努力。httplook抓取路由配置界面信息...
  10. Android----paint触摸轨迹监听