我有一个巨大的文本文件,每行看起来像这样:
某种通用菜单^ a_sub_menu_title ^^ pagNumber
请注意,第一个“常规菜单”有空格,第二个部分(一个副标题)每个单词用“_”字符分开,最后是一个数字(一个pag数字)。我想在3个(明显的)部分中拆分每一行,因为我想在python中创建某种目录。
我正在尝试使用re模块,但由于插入符号在这样的模块中具有强烈的意义,我无法弄清楚如何做到这一点。
有人可以帮帮我????答案 0 :(得分:4)
>>> "Some sort of general menu^a_sub_menu_title^^pagNumber".split("^")
['Some sort of general menu', 'a_sub_menu_title', '', 'pagNumber']
答案 1 :(得分: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']
答案 2 :(得分:0)
您需要做的是“逃避”特殊字符,例如r'\^'
。但在这种情况下,比正则表达式更好的是:
line = "Some sort of general menu^a_sub_menu_title^^pagNumber"
(menu, title, dummy, page) = line.split('^')
以更简单的方式为您提供组件。
答案 3 :(得分:0)
你可以说string.split("^")
将字符串分成包含每个段的数组。唯一需要注意的是,它会将连续的插入符号分成空字符串。您可以通过将连续的克拉折叠成单个克拉,或者在结果数组中检测空字符串来防止这种情况。
有关详细信息,请参阅http://docs.python.org/library/stdtypes.html
这有帮助吗?
答案 4 :(得分:0)
您的文件也可能使用与csv
模块兼容的格式,您也可以查看,特别是如果格式允许引用,因为line.split
会中断。如果格式不使用引号而且它只是分隔符和文本,line.split
可能是最好的。
此外,对于re
模块,可以使用\
转义任何特殊字符,例如r'\^'
。我建议在跳转到使用re
之前1)学习如何编写正则表达式,2)首先寻找问题的解决方案,而不是跳到正则表达式 - «有些人在面对问题时,想“我知道,我会使用正则表达式。”现在他们有两个问题。 »