繁体   English   中英

使用多个定界符和条件分割字符串

[英]Splitting a string with multiple delimiters and conditions

我有一个来自日志文件的字符串,该文件具有多个定界符以使其具有顺序。

完整字符串field1.field2.field3/field4/field5|field6|field7//|field8..

以分隔. field1.field2.field3

/ /field4/field5

|分隔 但是, "/""." 在字符串|field6|field7//|field8..此部分中不是定界符|field6|field7//|field8..

目前,我正在解析如下

x
Out[64]: 'field1.field2.field3/field4/field5|field6|field7//|field8..'

y= x.split("|")
y
Out[66]: ['field1.field2.field3/field4/field5', 'field6', 'field7//', 'field8..']

z = y[0].split("/")
z
Out[68]: ['field1.field2.field3', 'field4', 'field5']

i = z[0].split(".")
i
Out[70]: ['field1', 'field2', 'field3']


result = i+z[1:]+y[1:]
result
Out[79]: 
['field1',
 'field2',
 'field3',
 'field4',
 'field5',
 'field6',
 'field7//',
 'field8..']

我认为它的解析效率很低。 赞赏一些建议,以使其更好。

我不能使用所有三个定界符[|\\.]来无条件地定界字符串中的属性

使用re.split

re.split(r'[./|]', x)

要么

re.split(r'\b[./]\b|\|', x)
  • \\b[./]\\b匹配在单词字符之前和之后的所有点或正斜杠。

  • | 要么

  • \\| 匹配所有管道字符。

  • re.split会根据匹配的字符进行拆分。

要么

>>> s = "field1.field2.field3/field4/field5|field6|field7//|field8.."
>>> re.split(r'(?<!\.)\.(?!\.)|(?<!\/)\/(?!\/)|(?<!\|)\|(?!\|)', s)
['field1', 'field2', 'field3', 'field4', 'field5', 'field6', 'field7//', 'field8..']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM