【问题标题】:Split string with caret character in python在python中使用插入符号拆分字符串
【发布时间】:2011-06-18 03:13:57
【问题描述】:

我有一个巨大的文本文件,每一行都是这样的:

某种通用菜单^a_sub_menu_title^^pagNumber

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

我正在尝试使用 re 模块,但由于插入符号在此类模块中具有很强的含义,我不知道该怎么做。

有人可以帮我吗????

【问题讨论】:

  • 一个简单的谷歌搜索术语“python split string”会产生你的答案。我并不是说要苛刻,但是如果您不学习如何进行 google 搜索,并且您的所有问题都依赖堆栈溢出,那么您将需要很长时间才能成为一名称职的程序员。祝你好运。

标签: python regex text split


【解决方案1】:
>>> "Some sort of general menu^a_sub_menu_title^^pagNumber".split("^")
['Some sort of general menu', 'a_sub_menu_title', '', 'pagNumber']

【讨论】:

    【解决方案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']
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        这有帮助吗?

        【讨论】:

          【解决方案5】:

          也有可能您的文件使用了与csv 模块兼容的格式,您也可以调查一下,尤其是在格式允许引用的情况下,因为那样line.split 会中断。如果格式不使用引号而只是分隔符和文本,line.split 可能是最好的。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-01-03
            • 1970-01-01
            相关资源
            最近更新 更多