我一直在努力写出一行正则表达式来分割我需要的一切。我真的想尽我所有的可能性,然后再诉诸第二次数据。
目前,我一直在使用此正则表达式将一行ascii数据拆分为多个片段:
line = 'setAttr -s 2 ".iog[0].og"'
re.split(r'("[^"\\]*(?:\\.[^"\\]*)*"|[^\s();]+)', line)
// Result: ['setAttr', '-s', '2', '".iog[0].og"']
我真正想要的是仅捕获字符串引号内的文本以及所有常规单词,数字和标志:
// Result: ['setAttr', '-s', '2', '.iog[0].og']
我知道这似乎很愚蠢,但是性能时间是此代码的主要成败点。Shlex目前无法解决,因为处理成千上万行数据花费的时间太长。
有人知道这样的表达吗?
您可以通过两个捕获组来捕获所需的零件,然后将它们组合起来:
r'"([^"\\]*(?:\\.[^"\\]*)*)"|([^\s();]+)'
^ ^ ^ ^
之所以会成功,是因为捕获组一次只能填充一个,其中一个始终为空:
["{}{}".format(x,y) for x, y in re.findall(r'"([^"\\]*(?:\\.[^"\\]*)*)"|([^\s();]+)', line)]
参见Python演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句