使用多个分隔符和条件拆分字符串
Splitting a string with multiple delimiters and conditions
我有一个来自日志文件的字符串,它有多个定界符以使其按顺序排列。
完整字符串 field1.field2.field3/field4/field5|field6|field7//|field8..
由 .
field1.field2.field3
分隔
由 /
/field4/field5
分隔
由|
分隔。但是,"/"
和 "."
在这部分字符串中不是分隔符
|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..']
我有一个来自日志文件的字符串,它有多个定界符以使其按顺序排列。
完整字符串 field1.field2.field3/field4/field5|field6|field7//|field8..
由 .
field1.field2.field3
由 /
/field4/field5
由|
分隔。但是,"/"
和 "."
在这部分字符串中不是分隔符
|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..']