百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python 字符串拆分说明

itomcoil 2025-02-09 12:37 37 浏览

Python 字符串拆分说明

分钟阅读

字符串操作是 Python 的一项基本技能,了解如何拆分字符串是其中的一个关键方面。在本综合指南中,我们将探讨拆分字符串的各种方法和技术,包括 and 函数、正则表达式 (regex) 和高级拆分技术。在本教程结束时,您将深入了解如何在 Python 中处理字符串拆分。split()rsplit()

为什么要拆分字符串?

字符串拆分是根据特定条件将字符串分解为较小部分的过程。这对于各种任务非常有用,例如数据处理、文本分析和解析结构化数据格式(如 CSV 或 JSON)。Python 提供了几种方法和工具来轻松执行字符串拆分。

拆分方法概述

Python 提供了几种拆分字符串的技术:

  • split():使用指定的分隔符(默认:空格)将字符串拆分为子字符串。
  • rsplit():从右端拆分字符串。
  • 正则表达式 (regex):提供强大的基于模式的拆分。
  • 高级技术:针对特定拆分用例的自定义方法。

在本指南中,我们将深入探讨每种技术,并提供示例和用例以深入了解。

基本字符串拆分split()

按空格拆分

该方法是基于空格将字符串拆分为单词的最常见方法。让我们看一个例子。split()



st = "Python is a versatile programming language."
words = st.split()
print(words)

上面的代码将给出以下结果。

['Python', 'is', 'a', 'versatile', 'programming', 'language.']

默认情况下, 使用一个或多个空格字符分隔字符串。split()

按特定字符拆分

您可以通过将字符串作为参数发送到 split() 函数来按特定字符拆分字符串。让我们尝试实际地做到这一点。


csv_data = "apple,banana,cherry,grape"
fruits = csv_data.split(',')
print(fruits)

运行代码后,它会给出以下输出。

['apple', 'banana', 'cherry', 'grape']

这对于解析 CSV 文件和其他结构化数据特别有用。

将 Python 字符串拆分为单词

要将字符串拆分为单个单词,请使用不带参数的 Python。为了说明这一点,我们举了一个简单的例子。split()



sentence = "Python is a versatile programming language."
words = sentence.split()
print(words)

当您运行此代码时,它将给出以下结果。

['Python', 'is', 'a', 'versatile', 'programming', 'language.']

这是处理自然语言处理 (NLP) 任务时的常见操作。

拆分为数字数组

如果字符串包含由特定字符分隔的数字,则可以将其拆分并将子字符串转换为数字数组。按照以下示例清楚地理解它。



num_str_prime = "7, 13, 17, 19, 23"
num_list = [int(n) for n in num_str_prime.split(',')]
print(num_list)

您将在执行时获得以下输出。

[7, 13, 17, 19, 23]

在这个例子中,我们首先用逗号分割字符串,然后调用列表推导式将子字符串转换为整数。

高级字符串拆分rsplit()

从右边拆分 Python 中的字符串

该方法从右端拆分字符串。让我们借助示例进行演示。rsplit()


filename = "my-file-name.txt"
parts = filename.rsplit('-', 1)

# Split into at most 1 part from the right
print(parts)

运行上述 Python 代码后,它会打印以下内容。

['my-file', 'name.txt']

这在处理具有多次出现的分隔符的文件路径或字符串时很有用,并且您希望从最后一个出现中分离出来。

使用参数maxsplit

我们可以用参数控制最大拆分次数。maxsplit

# Splitting a string into two parts from the right

path = "/home/user/documents/python_guide.pdf"

parts = path.rsplit('/', 1)

print(parts)

这是上述代码段的输出。

['/home/user/documents', 'python_guide.pdf']

该参数将拆分次数限制为指定值。增加其值将按比例增加拆分次数。maxsplit

 

path = "/home/user/documents/python_guide.pdf"
parts = path.rsplit('/', 2)
print(parts)

# ['/home/user', 'documents', 'python_guide.pdf']

基于正则表达式的字符串拆分

正则表达式(通常称为正则表达式)是用于模式匹配和文本操作的强大工具。它们允许您定义复杂的模式并提取与这些模式匹配的子字符串。

要使用正则表达式,您可以导入模块。它具有各种功能来支持Python中的字符串拆分。re

用re.split()

该函数根据 Python 中的正则表达式模式拆分字符串:re.split()

import re


 
text = "Hello, world. Python programming is fun!"

tokens = re.split(r'[,\s]+', text)


print(tokens)

运行后,代码将打印以下结果。

['Hello', 'world.', 'Python', 'programming', 'is', 'fun!']

在此示例中,我们使用正则表达式模式 [,\s]+ 拆分字符串,该模式匹配一个或多个逗号或空格字符。

复杂模式拆分

正则表达式可以处理复杂的拆分方案。例如,用各种标点符号拆分字符串:

import re # Splitting a string by punctuation marks


text = "Hello! World? Python, programming. Is this fun?"

tokens = re.split(r'[!?,.\s]+', text)


print(tokens)

上述程序的输出如下。

['Hello', 'World', 'Python', 'programming', 'Is', 'this', 'fun', '']

此正则表达式模式匹配一个或多个出现的标点符号或空格字符。[!?,.\s]+

使用“后瞻”和“展望”进行拆分

正则表达式允许您使用 和 断言执行更复杂的拆分操作。例如,用空格分隔字符串,但排除双引号内的空格:lookbehindlookahead

import re

# Splitting a string by spaces but not within double quotes
text = 'Python "is great" for "string manipulation".'
tokens = re.split(r'(?

上面的 Python 代码使用模块拆分字符串并打印以下内容。re

['Python', '"is great"', 'for', '"string manipulation".']

在此正则表达式模式中,是否定断言,并且是负前瞻断言,确保双引号内的空格不用于拆分。(?

高级字符串拆分技术

将长字符串拆分为固定长度的块

有时您可能需要将长字符串拆分为固定长度的块。在这种情况下,Python的for loop是你最好的朋友。让我们如何利用它。

 long_string = "1234567890ABCDEFGHIJ"

chunk_size = 4
chunks = [long_string[i:i + chunk_size] for i in range(0, len(long_string), chunk_size)]

print(chunks)

运行上述编码片段后,它会打印以下内容。

['1234', '5678', '90AB', 'CDEF', 'GHIJ']

在此示例中,我们使用列表推导来迭代字符串并将其拆分为指定长度的块。

使用多个分隔符进行拆分

您可以通过将它们组合成正则表达式模式来使用多个分隔符拆分字符串:

import re

text = "Apples, Bananas; Cherries Apples Bananas"
tokens = re.split(r'[ ,;]+', text)

print(tokens)

输出:

['Apples', 'Bananas', 'Cherries', 'Apples', 'Bananas']

在此示例中,正则表达式模式匹配一个或多个出现的空格、逗号或分号。[ ,;]+

剥离和拆分

有时您可能希望在拆分时从子字符串中删除前导和尾随空格。您可以通过在列表推导式中使用该方法来实现此目的:strip()

 
data = "   1,   2,   3,   4,   5   "
numbers = [int(num.strip()) for num in data.split(',')]

print(numbers)

输出:

[1, 2, 3, 4, 5]

本示例先去除每个子字符串的空格,然后再将其转换为整数。

性能注意事项

选择字符串拆分方法时,请考虑以下事项:

时空复杂度

  • split():O(n) 时间复杂度,其中 n 是字符串的长度。它创建一个子字符串列表,因此空间复杂度为 O(n)。
  • rsplit():类似于 split(),但从右端拆分。
  • 基于正则表达式的拆分:时间复杂度取决于正则表达式模式的复杂性。简单模式可能具有线性时间复杂度,而复杂模式可能具有更高的时间复杂度。内存使用情况取决于生成的子字符串的数量。

选择正确的方法

  • 对于按空格或单个分隔符进行基本拆分,请使用 或 。split()rsplit()
  • 对于复杂模式或多个分隔符,请考虑使用 。re.split()
  • 如果性能至关重要,并且要拆分大型字符串,请测试和分析代码以选择最有效的方法。

示例和用例

下面是一些在 Python 中拆分字符串的有用示例。准备好你的Python IDE。

另请阅读: 在 Python 中合并多个 CSV 文件

解析 CSV 数据

字符串拆分最常见的用例之一是解析 CSV(逗号分隔值)数据:

import csv

# Parsing CSV data
csv_data = "name,age,email\nRama,30,rama@ramayan.com\nSita,25,sita@ramayan.com"
csv_reader = csv.reader(csv_data.splitlines())
for row in csv_reader:
    print(row)

输出:

['name', 'age', 'email']
['Rama', '30', 'rama@ramayan.com']
['Sita', '25', 'sita@ramayan.com']

在这里,我们将CSV数据拆分为行,然后使用将其解析为行。csv.reader

标记化文本

标记化是自然语言处理 (NLP) 中的关键步骤。它涉及将文本拆分为单词或标记:

import nltk

# Tokenizing text using NLTK (Natural Language Toolkit)
# Please ensure that nlth module is installed

text = "Tokenization is an important NLP task."
tokens = nltk.word_tokenize(text)

print(tokens)

Python 的函数按以下方式拆分字符串。nltk tokenize

['Tokenization', 'is', 'an', 'important', 'NLP', 'task', '.']

在此示例中,我们使用 NLTK 库进行标记化,这比处理自然语言文本的简单字符串拆分更可靠。

从文本中提取网址

在处理网页抓取或文本分析时,从文本块中提取 URL 是一项常见任务:

import re
 
text = "Visit our website at https://www.ramayan.com. For more info, go to http://ramayan.org."
urls = re.findall(r'https?://\S+', text)

print(urls)

执行后,您将获得以下输出。

['https://www.ramayan.com.', 'http://ramayan.org.']

在此示例中,正则表达式模式与 HTTP 或 HTTPS URL 匹配。https?://\S+

另请参阅:Python 中的多行字符串

拆分多行文本

将多行文本拆分为段落或句子对于文本处理任务非常有用。检查以下示例。

 

text = """Paragraph 1: This is the first paragraph.
Paragraph 2: This is the second paragraph.
Paragraph 3: And this is the third paragraph."""
paragraphs = text.split('\n\n')  # Assuming double line breaks between paragraphs

print(paragraphs)

上面的 Python 程序打印以下内容。

['Paragraph 1: This is the first paragraph.',
 'Paragraph 2: This is the second paragraph.',
 'Paragraph 3: And this is the third paragraph.']

在此示例中,我们通过检测双换行符 () 将文本拆分为段落。\n\n

结论

在 Python 中拆分字符串的各种技术,从基本方法(如)到使用正则表达式和自定义拆分方案的更高级技术。您还探索了实际应用的示例和用例。split()rsplit()

当您处理不同的 Python 项目时,您会遇到各种字符串拆分挑战。您在本指南中获得的知识将使您能够自信地应对这些挑战并操作文本数据。

请记住根据任务的特定要求选择正确的拆分方法,并在处理大型数据集时考虑性能影响。

字符串拆分是任何 Python 程序员的基本技能,掌握它为项目中的数据处理和文本操作开辟了无数的可能性。

相关推荐

《Queendom》宣布冠军!女团MAMAMOO四人激动落泪

网易娱乐11月1日报道据台湾媒体报道,南韩女团竞争回归的生死斗《Queendom》昨(10/31)晚播出大决赛,并以直播方式进行,6组女团、女歌手皆演唱新歌,并加总前三轮的赛前赛、音源成绩与直播现场投...

正确复制、重写别人的代码,不算抄袭

我最近在一篇文章提到,工程师应该怎样避免使用大量的库、包以及其他依赖关系。我建议的另一种方案是,如果你没有达到重用第三方代码的阈值时,那么你就可以自己编写代码。在本文中,我将讨论一个在重用和从头开始编...

HTML DOM tr 对象_html event对象

tr对象tr对象代表了HTML表格的行。HTML文档中出现一个<tr>标签,就会创建一个tr对象。tr对象集合W3C:W3C标签。集合描述W3Ccells返回...

JS 打造动态表格_js如何动态改变表格内容

后台列表页最常见的需求:点击表头排序+一键全选。本文用原生js代码实现零依赖方案,涵盖DOM查询、排序算法、事件代理三大核心技能。效果速览一、核心思路事件入口:为每个<th>绑...

连肝7个晚上,总结了66条计算机网络的知识点

作者|哪吒来源|程序员小灰(ID:chengxuyuanxiaohui)计算机网络知识是面试常考的内容,在实际工作中经常涉及。最近,我总结了66条计算机网络相关的知识点。1、比较http0....

Vue 中 强制组件重新渲染的正确方法

作者:MichaelThiessen译者:前端小智来源:hackernoon有时候,依赖Vue响应方式来更新数据是不够的,相反,我们需要手动重新渲染组件来更新数据。或者,我们可能只想抛开当前的...

为什么100个前端只有1人能说清?浏览器重排/重绘深度解析

面试现场的"致命拷问""你的项目里做过哪些性能优化?能具体讲讲重排和重绘的区别吗?"作为面试官,我在秋招季连续面试过100多位前端候选人,这句提问几乎成了必考题。但令...

HTML DOM 介绍_dom4j html

HTMLDOM(文档对象模型)是一种基于文档的编程接口,它是HTML和XML文档的编程接口。它可以让开发人员通过JavaScript或其他脚本语言来访问和操作HTML和XML文档...

JavaScript 事件——“事件流和事件处理程序”的注意要点

事件流事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,而NetscapeCommunicator的事件流是事件捕获流。事件冒泡即事件开始时由最具体的元素接收,然后逐级向上传播到较为不...

探秘 Web 水印技术_水印制作网页

作者:fransli,腾讯PCG前端开发工程师Web水印技术在信息安全和版权保护等领域有着广泛的应用,对防止信息泄露或知识产品被侵犯有重要意义。水印根据可见性可分为可见水印和不可见水印(盲水印)...

国外顶流网红为流量拍摄性侵女学生?仅被封杀三月,回归仍爆火

曾经的油管之王,顶流网红DavidDobrik复出了。一切似乎都跟他因和成员灌酒性侵女学生被骂到退网之前一样:住在950万美元的豪宅,开着20万美元的阿斯顿马丁,每条视频都有数百万观看...人们仿佛...

JavaScript 内存泄漏排查方法_js内存泄漏及解决方法

一、概述本文主要介绍了如何通过Devtools的Memory内存工具排查JavaScript内存泄漏问题。先介绍了一些相关概念,说明了Memory内存工具的使用方式,然后介绍了堆快照的...

外贸独立站,网站优化的具体内容_外贸独立站,网站优化的具体内容有哪些

Wordpress网站优化,是通过优化代码、数据库、缓存、CSS/JS等内容,提升网站加载速度、交互性和稳定性。网站加载速度,是Google搜索引擎的第一权重,也是SEO优化的前提。1.优化渲染阻塞。...

这8个CSS工具可以提升编程速度_css用什么编译器

下面为大家推荐的这8个CSS工具,有提供函数的,有提供类的,有提取代码的,还有收集CSS的统计数据的……请花费两分钟的时间看完这篇文章,或许你会找到意外的惊喜,并且为你的编程之路打开了一扇新的大门。1...

vue的理解-vue源码 历史 简介 核心特性 和jquery区别 和 react对比

一、从历史说起Web是WorldWideWeb的简称,中文译为万维网我们可以将它规划成如下的几个时代来进行理解石器时代文明时代工业革命时代百花齐放时代石器时代石器时代指的就是我们的静态网页,可以欣...