使用正则表达式将 Maya ASCII 命令拆分为片段
Split Maya ASCII Command into Fragments using Regex
我一直在努力编写一个单行正则表达式来拆分我需要的一切。在我第二次重新评估我的数据之前,我真的想用尽我所有的可能性。
目前我一直在使用这个正则表达式将一行 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)]
我一直在努力编写一个单行正则表达式来拆分我需要的一切。在我第二次重新评估我的数据之前,我真的想用尽我所有的可能性。
目前我一直在使用这个正则表达式将一行 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)]