【问题标题】:How to split and ignore separators in file path string using Python如何使用 Python 拆分和忽略文件路径字符串中的分隔符
【发布时间】:2019-10-02 02:07:09
【问题描述】:

我有一个这样的字符串

LASTSCAN:C:\Users\Bob\Scripts\VisualizeData\doc\placeholder.PNG:1557883221.11

字符串的格式是[Command][File path][Timestamp]。目前它用冒号分隔,但文件路径也有一个冒号。其他时候,字符串的格式可能会改变,但总是用冒号分隔。例如:

SCAN:2000:25:-12.5:12.5:C:\Users\Potato\potato.PNG:1557884143.93

这个字符串的签名是[Command][Frames][Speed][Start][Stop][File path][Timestamp]

如何拆分输入字符串以获得这样的输出?

['LASTSCAN', 'C:\Users\Bob\Scripts\VisualizeData\doc\placeholder.PNG', '1557883221.11']

第二个示例的预期输出

['SCAN', '2000', '25', '-12.5', '12.5', 'C:\Users\Potato\potato.PNG', '1557884143.93']

【问题讨论】:

  • 是 C:\ 始终是路径中唯一允许冒号的部分吗?此外,FWIW 这些是冒号 (:) 而不是分号 (;)。
  • 是的,只有字符串的文件路径部分有允许的冒号

标签: python regex string list split


【解决方案1】:

尝试拆分正则表达式模式:(?!\\)

input = "LASTSCAN:C:\Users\Bob\Scripts\VisualizeData\doc\placeholder.PNG:1557883221.11"
output = re.split(r':(?!\\)', input)
print(output)

['LASTSCAN', 'C:\\Users\\Bob\\Scripts\\VisualizeData\\doc\\placeholder.PNG', '1557883221.11']

逻辑是在任何 not 的冒号上拆分,后跟路径分隔符。这样可以避免文件路径中的: 成为分割点。

【讨论】:

    【解决方案2】:

    如果您可以确定要保留的“:”后面紧跟一个“\”,并且周围不会有其他“\”。你可以试试这样的。

    new = string.split(':')
    for i in range(new):
        if new[i][0] == "\":
            new[i-1] += new.pop(i)
    

    【讨论】:

      【解决方案3】:

      为什么不使用正则表达式:

      import re
      s = 'SCAN:2000:25:-12.5:12.5:C:/Users/Potato/potato.PNG:1557884143.93'
      print(re.split(':(?!/)',s))
      

      输出:

      ['SCAN', '2000', '25', '-12.5', '12.5', 'C:/Users/Potato/potato.PNG', '1557884143.93']
      

      另外,至少对我来说,您必须将\ 更改为/,并且在正则表达式中也是如此。

      【讨论】:

        猜你喜欢
        • 2011-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        相关资源
        最近更新 更多