分鐘閱讀
字符串操作是 Python 的一項(xiàng)基本技能,了解如何拆分字符串是其中的一個(gè)關(guān)鍵方面。在本綜合指南中,我們將探討拆分字符串的各種方法和技術(shù),包括 and 函數(shù)、正則表達(dá)式 (regex) 和高級(jí)拆分技術(shù)。在本教程結(jié)束時(shí),您將深入了解如何在 Python 中處理字符串拆分。split()rsplit()
字符串拆分是根據(jù)特定條件將字符串分解為較小部分的過(guò)程。這對(duì)于各種任務(wù)非常有用,例如數(shù)據(jù)處理、文本分析和解析結(jié)構(gòu)化數(shù)據(jù)格式(如 CSV 或 JSON)。Python 提供了幾種方法和工具來(lái)輕松執(zhí)行字符串拆分。
Python 提供了幾種拆分字符串的技術(shù):
在本指南中,我們將深入探討每種技術(shù),并提供示例和用例以深入了解。
該方法是基于空格將字符串拆分為單詞的最常見(jiàn)方法。讓我們看一個(gè)例子。split()
st = 'Python is a versatile programming language.'words = st.split()print(words)
上面的代碼將給出以下結(jié)果。
['Python', 'is', 'a', 'versatile', 'programming', 'language.']
默認(rèn)情況下, 使用一個(gè)或多個(gè)空格字符分隔字符串。split()
您可以通過(guò)將字符串作為參數(shù)發(fā)送到 split() 函數(shù)來(lái)按特定字符拆分字符串。讓我們嘗試實(shí)際地做到這一點(diǎn)。
csv_data = 'apple,banana,cherry,grape'fruits = csv_data.split(',')print(fruits)
運(yùn)行代碼后,它會(huì)給出以下輸出。
['apple', 'banana', 'cherry', 'grape']
這對(duì)于解析 CSV 文件和其他結(jié)構(gòu)化數(shù)據(jù)特別有用。
要將字符串拆分為單個(gè)單詞,請(qǐng)使用不帶參數(shù)的 Python。為了說(shuō)明這一點(diǎn),我們舉了一個(gè)簡(jiǎn)單的例子。split()
sentence = 'Python is a versatile programming language.'words = sentence.split()print(words)
當(dāng)您運(yùn)行此代碼時(shí),它將給出以下結(jié)果。
['Python', 'is', 'a', 'versatile', 'programming', 'language.']
這是處理自然語(yǔ)言處理 (NLP) 任務(wù)時(shí)的常見(jiàn)操作。
如果字符串包含由特定字符分隔的數(shù)字,則可以將其拆分并將子字符串轉(zhuǎn)換為數(shù)字?jǐn)?shù)組。按照以下示例清楚地理解它。
num_str_prime = '7, 13, 17, 19, 23'num_list = [int(n) for n in num_str_prime.split(',')]print(num_list)
您將在執(zhí)行時(shí)獲得以下輸出。
[7, 13, 17, 19, 23]
在這個(gè)例子中,我們首先用逗號(hào)分割字符串,然后調(diào)用列表推導(dǎo)式將子字符串轉(zhuǎn)換為整數(shù)。
該方法從右端拆分字符串。讓我們借助示例進(jìn)行演示。rsplit()
filename = 'my-file-name.txt'parts = filename.rsplit('-', 1)# Split into at most 1 part from the rightprint(parts)
運(yùn)行上述 Python 代碼后,它會(huì)打印以下內(nèi)容。
['my-file', 'name.txt']
這在處理具有多次出現(xiàn)的分隔符的文件路徑或字符串時(shí)很有用,并且您希望從最后一個(gè)出現(xiàn)中分離出來(lái)。
我們可以用參數(shù)控制最大拆分次數(shù)。maxsplit
# Splitting a string into two parts from the rightpath = '/home/user/documents/python_guide.pdf'parts = path.rsplit('/', 1)print(parts)
這是上述代碼段的輸出。
['/home/user/documents', 'python_guide.pdf']
該參數(shù)將拆分次數(shù)限制為指定值。增加其值將按比例增加拆分次數(shù)。maxsplit
path = '/home/user/documents/python_guide.pdf'parts = path.rsplit('/', 2)print(parts)# ['/home/user', 'documents', 'python_guide.pdf']
正則表達(dá)式(通常稱為正則表達(dá)式)是用于模式匹配和文本操作的強(qiáng)大工具。它們?cè)试S您定義復(fù)雜的模式并提取與這些模式匹配的子字符串。
要使用正則表達(dá)式,您可以導(dǎo)入模塊。它具有各種功能來(lái)支持Python中的字符串拆分。re
該函數(shù)根據(jù) Python 中的正則表達(dá)式模式拆分字符串:re.split()
import re text = 'Hello, world. Python programming is fun!'tokens = re.split(r'[,\s]+', text)print(tokens)
運(yùn)行后,代碼將打印以下結(jié)果。
['Hello', 'world.', 'Python', 'programming', 'is', 'fun!']
在此示例中,我們使用正則表達(dá)式模式 [,\s]+ 拆分字符串,該模式匹配一個(gè)或多個(gè)逗號(hào)或空格字符。
正則表達(dá)式可以處理復(fù)雜的拆分方案。例如,用各種標(biāo)點(diǎn)符號(hào)拆分字符串:
import re # Splitting a string by punctuation markstext = 'Hello! World? Python, programming. Is this fun?'tokens = re.split(r'[!?,.\s]+', text)print(tokens)
上述程序的輸出如下。
['Hello', 'World', 'Python', 'programming', 'Is', 'this', 'fun', '']
此正則表達(dá)式模式匹配一個(gè)或多個(gè)出現(xiàn)的標(biāo)點(diǎn)符號(hào)或空格字符。[!?,.\s]+
正則表達(dá)式允許您使用 和 斷言執(zhí)行更復(fù)雜的拆分操作。例如,用空格分隔字符串,但排除雙引號(hào)內(nèi)的空格:lookbehindlookahead
import re# Splitting a string by spaces but not within double quotestext = 'Python 'is great' for 'string manipulation'.'tokens = re.split(r'(?<!')\s+(?!')', text)print(tokens)
上面的 Python 代碼使用模塊拆分字符串并打印以下內(nèi)容。re
['Python', ''is great'', 'for', ''string manipulation'.']
在此正則表達(dá)式模式中,是否定斷言,并且是負(fù)前瞻斷言,確保雙引號(hào)內(nèi)的空格不用于拆分。(?<!')lookbehind(?!')
有時(shí)您可能需要將長(zhǎng)字符串拆分為固定長(zhǎng)度的塊。在這種情況下,Python的for loop是你最好的朋友。讓我們?nèi)绾卫盟?/span>
long_string = '1234567890ABCDEFGHIJ'chunk_size = 4chunks = [long_string[i:i + chunk_size] for i in range(0, len(long_string), chunk_size)]print(chunks)
運(yùn)行上述編碼片段后,它會(huì)打印以下內(nèi)容。
['1234', '5678', '90AB', 'CDEF', 'GHIJ']
在此示例中,我們使用列表推導(dǎo)來(lái)迭代字符串并將其拆分為指定長(zhǎng)度的塊。
您可以通過(guò)將它們組合成正則表達(dá)式模式來(lái)使用多個(gè)分隔符拆分字符串:
import retext = 'Apples, Bananas; Cherries Apples Bananas'tokens = re.split(r'[ ,;]+', text)print(tokens)
輸出:
['Apples', 'Bananas', 'Cherries', 'Apples', 'Bananas']
在此示例中,正則表達(dá)式模式匹配一個(gè)或多個(gè)出現(xiàn)的空格、逗號(hào)或分號(hào)。[ ,;]+
有時(shí)您可能希望在拆分時(shí)從子字符串中刪除前導(dǎo)和尾隨空格。您可以通過(guò)在列表推導(dǎo)式中使用該方法來(lái)實(shí)現(xiàn)此目的:strip()
data = ' 1, 2, 3, 4, 5 'numbers = [int(num.strip()) for num in data.split(',')]print(numbers)
輸出:
[1, 2, 3, 4, 5]
本示例先去除每個(gè)子字符串的空格,然后再將其轉(zhuǎn)換為整數(shù)。
選擇字符串拆分方法時(shí),請(qǐng)考慮以下事項(xiàng):
下面是一些在 Python 中拆分字符串的有用示例。準(zhǔn)備好你的Python IDE。
另請(qǐng)閱讀: 在 Python 中合并多個(gè) CSV 文件
字符串拆分最常見(jiàn)的用例之一是解析 CSV(逗號(hào)分隔值)數(shù)據(jù):
import csv# Parsing CSV datacsv_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數(shù)據(jù)拆分為行,然后使用將其解析為行。csv.reader
標(biāo)記化是自然語(yǔ)言處理 (NLP) 中的關(guān)鍵步驟。它涉及將文本拆分為單詞或標(biāo)記:
import nltk# Tokenizing text using NLTK (Natural Language Toolkit)# Please ensure that nlth module is installedtext = 'Tokenization is an important NLP task.'tokens = nltk.word_tokenize(text)print(tokens)
Python 的函數(shù)按以下方式拆分字符串。nltk tokenize
['Tokenization', 'is', 'an', 'important', 'NLP', 'task', '.']
在此示例中,我們使用 NLTK 庫(kù)進(jìn)行標(biāo)記化,這比處理自然語(yǔ)言文本的簡(jiǎn)單字符串拆分更可靠。
在處理網(wǎng)頁(yè)抓取或文本分析時(shí),從文本塊中提取 URL 是一項(xiàng)常見(jiàn)任務(wù):
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)
執(zhí)行后,您將獲得以下輸出。
['https://www.ramayan.com.', 'http://ramayan.org.']
在此示例中,正則表達(dá)式模式與 HTTP 或 HTTPS URL 匹配。https?://\S+
另請(qǐng)參閱:Python 中的多行字符串
將多行文本拆分為段落或句子對(duì)于文本處理任務(wù)非常有用。檢查以下示例。
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 paragraphsprint(paragraphs)
上面的 Python 程序打印以下內(nèi)容。
['Paragraph 1: This is the first paragraph.', 'Paragraph 2: This is the second paragraph.', 'Paragraph 3: And this is the third paragraph.']
在此示例中,我們通過(guò)檢測(cè)雙換行符 () 將文本拆分為段落。\n\n
在 Python 中拆分字符串的各種技術(shù),從基本方法(如)到使用正則表達(dá)式和自定義拆分方案的更高級(jí)技術(shù)。您還探索了實(shí)際應(yīng)用的示例和用例。split()rsplit()
當(dāng)您處理不同的 Python 項(xiàng)目時(shí),您會(huì)遇到各種字符串拆分挑戰(zhàn)。您在本指南中獲得的知識(shí)將使您能夠自信地應(yīng)對(duì)這些挑戰(zhàn)并操作文本數(shù)據(jù)。
請(qǐng)記住根據(jù)任務(wù)的特定要求選擇正確的拆分方法,并在處理大型數(shù)據(jù)集時(shí)考慮性能影響。
字符串拆分是任何 Python 程序員的基本技能,掌握它為項(xiàng)目中的數(shù)據(jù)處理和文本操作開(kāi)辟了無(wú)數(shù)的可能性。
聯(lián)系客服