【问题标题】:Split string by two conditions - wildcard按两个条件拆分字符串 - 通配符
【发布时间】:2015-04-09 11:01:26
【问题描述】:

我需要用一个字符加上一个通配符来分割一个字符串:

text1 = "CompanyA-XYZ-257999_31.12.2000"
text2 = "CompanyB-XYZ-057999_31.12.2000"

我想在 [-2] 或 [-0] 位置拆分该字符串,因此就在 XYZ 之后。由于我有两个“-”,我不能简单地按那个字符来分割。事实上,我想以 [-AnyNumber] 的形式进行拆分,其中 AnyNumber 应该是整数的通配符。

【问题讨论】:

    标签: python string split


    【解决方案1】:

    您是否使用 re 尝试过此操作

    import re
    >>>re.findall("(.+XYZ)-(.+)",text1)
    [('CompanyA-XYZ', '257999_31.12.2000')]
    

    >>>re.findall("(.+)-(.+)",text1)
    [('CompanyA-XYZ', '257999_31.12.2000')]
    

    【讨论】:

    • 这是个好主意,如果文本是 text3 = "CompanyC-3552_31.12.2000",你能告诉我怎么做吗?代码中的“(.+)”是通配符吗?
    • 只需re.findall("(.+)-(.+)",text3)
    【解决方案2】:

    您不需要正则表达式,您可以使用str.rsplitmaxsplit 设置为1:

    text1 = "CompanyA-XYZ-257999_31.12.2000"
    
    print(text1.rsplit("-",1))
    ['CompanyA-XYZ', '257999_31.12.2000']
    
    text2 = "CompanyB-XYZ-057999_31.12.2000"
    print(text2.rsplit("-",1))
    ['CompanyB-XYZ', '057999_31.12.2000']
    

    如果您希望它们存储在变量中,只需解压缩:

    comp, dte = text2.rsplit("-",1)
    print(comp,dte)
    ('CompanyB-XYZ', '057999_31.12.2000')
    

    【讨论】:

      【解决方案3】:
      >>> text1 = "CompanyA-XYZ-257999_31.12.2000"
      
      >>> text1[:-18]
      'CompanyA-XYZ'
      
      >>> text1[-17:]
      '257999_31.12.2000'
      

      【讨论】:

        【解决方案4】:

        [-AnyNumber]分割

        In [5]: import re
        
        In [6]: re.split('-(?:[0-9])', text1)
        Out[6]: ['CompanyA-XYZ', '57999_31.12.2000']
        
        In [7]: re.split('-(?:[0-9])', text2)
        Out[7]: ['CompanyB-XYZ', '57999_31.12.2000']
        

        【讨论】:

          【解决方案5】:

          使用带有前瞻断言的正则表达式:

          >>> import re
          >>> text1 = "CompanyA-XYZ-257999_31.12.2000"
          >>> text2 = "CompanyB-XYZ-057999_31.12.2000"
          >>> re.split('-(?=\d)', text1)
          ['CompanyA-XYZ', '257999_31.12.2000']
          >>> re.split('-(?=\d)', text2)
          ['CompanyB-XYZ', '057999_31.12.2000']
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-10-03
            • 1970-01-01
            • 2023-03-23
            • 1970-01-01
            • 2018-01-06
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多