python - 使用多个分隔符和条件拆分字符串

标签 python regex parsing split

我有一个来自日志文件的字符串,它有多个分隔符以使其顺序排列。

完整字符串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..']

关于python - 使用多个分隔符和条件拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604180/

相关文章:

java - Retrofit JSON Error 解析错误

java - 解析具有多个字段的 json 对象

c# - 用引号解析命令行参数

c# - 模式 [xx_- ].[xx_- ] C# 的正则表达式

regex - 在 bash 中解析类似 .csv 的文件

python - Anaconda Python安装错误

python - Pandas 中的嵌套 If 语句

具有多种模式的 Python re.findall

Python 常见问题解答 : “How fast are exceptions?”

python - 在 Anaconda python 中配置根路径