【问题标题】:how to extract data from nested parenthesis?如何从嵌套括号中提取数据?
【发布时间】:2022-06-28 01:15:16
【问题描述】:

我有一个字符串:

test_string = 'I(30TCH(50EDFva_25VAP_25SNE)_20UDS(80EDFvd_10VAP_10SNE)_20EDU(SNE)_10UDS(80EDFva_10VAP_10SNE)_10EDU(50EDFva_50VAP)_10EDP(50EDFva_50SNE))'

我需要从字符串中提取数据,最终结果应该是这样的:

I,
30TCH:50EDFva, 25VAP, 25SNE,
20UDS:80EDFvd, 10VAP, 10SNE
....

等等..

我想使用正则表达式,但这里不是很好的解决方案..

【问题讨论】:

  • 如果您知道数据的模式,Regex 将起作用。或者您可以使用堆栈并在到达每个括号时推送/弹出数据...

标签: python


【解决方案1】:

这似乎让你(几乎)到达那里 -

[_.replace("(", ": ").replace("_", ", ") for _ in re.split(r"\)_", test_string)]

输出

['I: 30TCH: 50EDFva, 25VAP, 25SNE',
 '20UDS: 80EDFvd, 10VAP, 10SNE',
 '20EDU: SNE',
 '10UDS: 80EDFva, 10VAP, 10SNE',
 '10EDU: 50EDFva, 50VAP',
 '10EDP: 50EDFva, 50SNE))']

【讨论】:

    【解决方案2】:

    我认为我们可能需要对逻辑进行更多说明。看起来( 应该翻译成:,但不是每次都这样。这是我使用正则表达式对它的破解。这可能不是您正在寻找的,但应该非常接近:

    import re
    
    def main():
        test_string = 'I(30TCH(50EDFva_25VAP_25SNE)_20UDS(80EDFvd_10VAP_10SNE)_20EDU(SNE)_10UDS(80EDFva_10VAP_10SNE)_10EDU(50EDFva_50VAP)_10EDP(50EDFva_50SNE))'
        
        test_string = re.sub("\)_", ",\n", test_string)
        test_string = re.sub("_", ",", test_string)
        test_string = re.sub("\(", ":", test_string)
        test_string = re.sub("\)\)", "", test_string)
    
        print(test_string)
    
    if __name__ == "__main__":
        main()
    

    结果:

    I:30TCH:50EDFva,25VAP,25SNE,
    20UDS:80EDFvd,10VAP,10SNE,
    20EDU:SNE,
    10UDS:80EDFva,10VAP,10SNE,
    10EDU:50EDFva,50VAP,
    10EDP:50EDFva,50SNE
    

    几乎只是一系列正则表达式。请注意,通过在订单中像这样使用re.sub,您可以随时清理字符串。您当然可以只是摆弄字符串的开头,将第一个 : 更改为 ,\n,但我不确定您输入的数据是否始终相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-27
      • 1970-01-01
      • 2022-12-23
      • 1970-01-01
      • 2010-11-27
      • 2022-06-12
      • 2018-08-27
      • 2019-02-07
      相关资源
      最近更新 更多