使用Regex

时间:2019-03-07 20:55:57

标签: regex python-2.7 maya

我一直在努力写出一行正则表达式来分割我需要的一切。我真的想尽我所有的可能性,然后再诉诸第二次数据。

目前,我一直在使用此正则表达式将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目前无法解决,因为处理成千上万行数据花费的时间太长。

有人知道这样的表达吗?

1 个答案:

答案 0 :(得分:1)

您可以通过两个捕获组来捕获所需的零件,然后将它们连接起来:

r'"([^"\\]*(?:\\.[^"\\]*)*)"|([^\s();]+)'
   ^                      ^  ^         ^

之所以会成功,是因为捕获组一次只能填充一个,其中一个始终为空:

["{}{}".format(x,y) for x, y in re.findall(r'"([^"\\]*(?:\\.[^"\\]*)*)"|([^\s();]+)', line)]

请参见Python demo