【问题标题】:Split a string on a certain character only if it doesn't follow directly after another particular character仅当字符串不紧跟在另一个特定字符之后时才在某个字符上拆分字符串
【发布时间】:2014-03-20 23:13:22
【问题描述】:

我有以下代码行,它将字符串 data2 拆分为一个列表,在一个空白实例上:

string_list = data2.split()

但是,在我的一些数据中,日期格式为"28, Dec"。在这里,上面的代码在我不想要的日期和月份之间的空白处进行分割。有没有办法可以说“在空白处拆分,但如果在逗号之后就不行”?

【问题讨论】:

标签: python string


【解决方案1】:

您需要使用regular expressions

>>> re.split('(?<!,) ', 'blah blah, blah')
['blah', 'blah, blah']

来自链接:

(?&lt;!...) 如果字符串中的当前位置不在前面,则匹配 通过匹配 ...。这称为否定后向断言。 与肯定的后向断言类似,包含的模式必须 只匹配一些固定长度的字符串。开头的模式 否定的lookbehind断言可能在开头匹配 正在搜索的字符串。

【讨论】:

    【解决方案2】:

    re.split 与否定的后向表达式一起使用:

    re.split(r'(?<!,)\s','I went on 28, Dec')
    Out[53]: ['I', 'went', 'on', '28, Dec']
    

    【讨论】:

      【解决方案3】:

      您可以使用正则表达式进行拆分,并利用后向表达式来确保您不会在逗号前面的空白字符上进行拆分:

      >>> import re
      >>> s = 'foo bar 28, Dec bar baz'
      >>> re.split('(?<!,)\s', s)
      ['foo', 'bar', '28, Dec', 'bar', 'baz']
      

      【讨论】:

        【解决方案4】:

        很抱歉重新启动此线程,但我试图解码 sqlite 单元格,我觉得有些奇怪。我会解释的。我试图通过创建一个中间有 0 的字符串然后对其进行数字化,将两个不同的数字编码到一个单元格中,例如: a=4 b=7 c=str(4)+'0'+str(7)

        问题是当第一个数字是 10 时,所以我正在使用这个 re.split('0([1-9])','1003') ['10','3','']

        为什么我得到一个应该只有 2 个长度的列表?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-17
          相关资源
          最近更新 更多