2011-06-18 29 views
0

脱字符我有一个​​巨大的文本文件,每行似乎是这样的:分割字符串可以用Python

某种通用的菜单^ a_sub_menu_title ^^ pagNumber

注意,第一个“一般菜单“有白色空格,第二部分(小标题)每个单词用”_“字符分隔,最后是一个数字(一个页码)。我想分割3个(明显的)部分中的每一行,因为我想在python中创建某种目录。

我正在尝试重新模块,但由于插入符号在这个模块中有很强的意义,所以我无法弄清楚它是如何做到的。

有人能帮我吗?

+2

一个简单的谷歌搜索术语“蟒蛇拆分字符串”会产生你的答案。我并不是说要苛刻,但如果你不学习如何进行谷歌搜索,并且你的所有问题都依赖堆栈溢出,那么要成为一名称职的程序员需要很长时间。祝你好运。 –

回答

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

精彩!!!! ...这是我需要的一切! – Alejandro

0

您需要做的是“逃避”特殊字符,如r'\^'。但是,在这种情况下,比正则表达式更好:

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

以更直接的方式为您提供组件。

+0

精彩!!!! ......这是我需要的一切! – Alejandro

0

你可以只说string.split("^")将字符串分成包含每个段的数组。唯一需要注意的是,它会将连续插入的字符分成一个空字符串。你可以通过将连续的克拉折叠成一个克拉,或者检测结果数组中的空字符串来防止这种情况发生。

欲了解更多信息,请参阅http://docs.python.org/library/stdtypes.html

这是否帮助?

+0

精彩!!!! ......这是我需要的一切!!!! – Alejandro

2

如果你只是想三件你可以做到这一点通过生成器表达式:

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'] 
0

这也有可能是你的文件正在使用的格式,是与csv模块兼容,还可以观察到的是,特别是如果格式允许引用,因为然后line.split会中断。如果格式不使用引号,它只是分隔符和文本,line.split可能是最好的。

此外,对于re模块,任何特殊字符都可以使用\进行转义,如r'\^'。我建议在跳转使用re之前建议1)学习如何编写正则表达式,2)首先寻找解决问题的方法,而不是跳至正则表达式 - “有些人在遇到问题时,会想”我知道,我会用正则表达式。“现在他们有两个问题。 »