簡體   English   中英

在python中使用尖號字符拆分字符串

[英]Split string with caret character in python

我有一個巨大的文本文件,每一行看起來像這樣:

某種常規菜單^ a_sub_menu_title ^^ pagNumber

請注意,第一個“常規菜單”有空格,第二個部分(副標題)每個單詞都用“ _”字符分隔,最后是一個數字(pag數字)。 我想將每行分成3個(明顯的)部分,因為我想在python中創建某種目錄。

我正在嘗試使用re模塊,但是由於插入符號在此類模塊中具有很強的含義,所以我不知道該怎么做。

有人可以幫我嗎?

>>> "Some sort of general menu^a_sub_menu_title^^pagNumber".split("^")
['Some sort of general menu', 'a_sub_menu_title', '', 'pagNumber']

如果只需要三部分,則可以通過生成器表達式來完成:

line = 'Some sort of general menu^a_sub_menu_title^^pagNumber'
pieces = [x for x in line.split('^') if x]
# pieces => ['Some sort of general menu', 'a_sub_menu_title', 'pagNumber']

您需要做的是“轉義”特殊字符,例如r'\\^' 但是在這種情況下,比正則表達式更好的是:

line = "Some sort of general menu^a_sub_menu_title^^pagNumber"
(menu, title, dummy, page) = line.split('^')

這樣可以使您的組件更加簡單明了。

您可以只說string.split("^")即可將字符串分成一個包含每個段的數組。 唯一的警告是,它將連續的插入號字符分成一個空字符串。 您可以通過將連續的克拉分解成單個克拉或在結果數組中檢測空字符串來防止這種情況。

有關更多信息,請參見http://docs.python.org/library/stdtypes.html

有幫助嗎?

也有可能您的文件使用的格式與csv模塊兼容,因此您也可以進行調查,特別是如果該格式允許引用,因為這樣line.split會中斷。 如果格式不使用引號,而只是定界符和文本,則line.split可能是最好的。

同樣,對於re模塊,任何特殊字符都可以使用\\進行轉義,例如r'\\^' 我建議在跳到re之前使用以下方法:1)學習如何編寫正則表達式,2)首先尋找問題的解決方案,而不是跳到正則表達式-«有些人在遇到問題時,以為“我知道,我將使用正則表達式。” 現在他們有兩個問題。 »

暫無
暫無

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

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