簡體   English   中英

如何在特定點拆分字符串?

[英]How do you split a string at a specific point?

我是python的新手,想把我讀過的文本文件拆分成兩個特定的部分。 以下是可以閱讀的示例:

f = ['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]

所以我想要實現的是能夠執行程序的第二部分是:

words = ['Cats','like','dogs','as','much','cats.']

numbers = [1,2,3,4,5,4,3,2,6]

我嘗試過使用:

words,numbers = f.split("][")

但是,這會從兩個新變量中刪除雙重支撐,這意味着我的程序的第二部分重新創建原始文本不起作用。

謝謝。

我假設f是一個字符串

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]" 

然后我們可以找到][的索引][並添加一個來查找括號之間的點

i = f.index('][')
a, b = f[:i+1], f[i+1:]
print(a)
print(b)

輸出:

['Cats','like','dogs','as','much','cats.']
[1,2,3,4,5,4,3,2,6]

如果你想仍然使用split()另一種選擇

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
d="]["
print f.split(d)[0]+d[0]
print d[1]+f.split(d)[1]

如果您可以使您的文件看起來像這樣:

[["Cats","like","dogs","as","much","cats."],[1,2,3,4,5,4,3,2,6]]

那么你可以簡單地使用Python的json模塊為你做這件事。 請注意,JSON格式需要雙引號而不是單引號。

import json
f = '[["Cats","like","dogs","as","much","cats."],[1,2,3,4,5,4,3,2,6]]'
a, b = json.loads(f)
print(a)
print(b)

有關json庫的文檔,請訪問: https//docs.python.org/3/library/json.html

使用正則表達式替代Patrick的答案:

import re

data = "f = ['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
pattern = 'f = (?P<words>\[.*?\])(?P<numbers>\[.*?\])'

match = re.match(pattern, data)
words = match.group('words')
numbers = match.group('numbers')

print(words)
print(numbers)

產量

['Cats','like','dogs','as','much','cats.']
[1,2,3,4,5,4,3,2,6]

如果我理解正確,你有一個文本文件,其中包含['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6] ,你只需要在括號之間的過渡處拆分該字符串。 您可以使用string.index()方法和字符串切片來完成此操作。 請參閱下面的控制台輸出:

>>> f = open('./catsdogs12.txt', 'r')
>>> input = f.read()[:-1]  # Read file without trailing newline (\n)
>>> input
"['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
>>> bracket_index = input.index('][')  # Get index of transition between brackets
>>> bracket_index
41
>>> words = input[:bracket_index + 1]  # Slice from beginning of string
>>> words
"['Cats','like','dogs','as','much','cats.']"
>>> numbers = input[bracket_index + 1:]  # Slice from middle of string
>>> numbers
'[1,2,3,4,5,4,3,2,6]'

請注意,這將為您提供一個與列表(數組)在視覺上完全相同的python字符串。 如果你需要表示為python本機對象的數據(即你可以像列表一樣使用它),你需要在兩個字符串上使用string[1:-1].split(',')某種組合和數字列表上的list.map()將數字從字符串轉換為數字。

希望這可以幫助!

你可以做的另一件事是首先替換][ with ]-[然后使用-進行拆分或分區-但我會建議你拆分,因為我們不想要這個分隔符。

分裂

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]" 
f = f.replace('][',']-[')
a,b = f.split('-')

產量

>>> print(a)
['Cats','like','dogs','as','much','cats.']
>>> print(b)
[1,2,3,4,5,4,3,2,6]

划分

f = "['Cats','like','dogs','as','much','cats.'][1,2,3,4,5,4,3,2,6]"
f = f.replace('][',']-[')
a,b,c = f.partition('-')

產量

>>> print(a)
['Cats','like','dogs','as','much','cats.']
>>> print(c)
[1,2,3,4,5,4,3,2,6]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM