【问题标题】:Python: splitting a complex string including parentheses and |Python:拆分包含括号和|的复杂字符串
【发布时间】:2013-03-30 13:50:39
【问题描述】:

在一个测试文件中,我有表格中的记录

DATA(VALUE1|VALUE2||VALUE4)

等等。

我想将此字符串分成两遍,第一遍产生“DATA”,第二遍给出括号内的内容,在“|”处分开。第二部分看起来微不足道,但到目前为止,我对第一部分的尝试很糟糕。

我更倾向于正则表达式而不是解析,因为最后行非常简单。

【问题讨论】:

    标签: python regex string parsing


    【解决方案1】:

    另一个建议:

    >>> s = "DATA(VALUE1|VALUE2||VALUE4)"
    >>> import re
    >>> matches = re.findall("[^()]+", s)
    >>> matches
    ['DATA', 'VALUE1|VALUE2||VALUE4']
    >>> result = {matches[0]: matches[1].split("|")}
    >>> result
    {'DATA': ['VALUE1', 'VALUE2', '', 'VALUE4']}
    

    【讨论】:

      【解决方案2】:

      您可以使用re.split 一次性完成:

      In [10]: import re
      
      In [11]: line = 'DATA(VALUE1|VALUE2||VALUE4)'
      
      In [12]: re.split(r'[(|)]', line)
      Out[12]: ['DATA', 'VALUE1', 'VALUE2', '', 'VALUE4', '']
      

      然后像这样提取数据和值:

      In [13]: parts = re.split(r'[(|)]', line)
      
      In [14]: data = parts[0]
      
      In [15]: values = parts[1:-1]
      
      In [16]: values
      Out[16]: ['VALUE1', 'VALUE2', '', 'VALUE4']
      

      【讨论】:

        【解决方案3】:
        import re
        s = 'DATA(VALUE1|VALUE2|VALUE4)'
        

        然后

        re.search(r"(.*)\((.*)\)", s).group(2).split("|")
        

        给你

        ['VALUE1', 'VALUE2', 'VALUE4']
        

        re.search(r"(.*)\((.*)\)", s).group(1)
        

        给你

        'DATA'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-24
          相关资源
          最近更新 更多