Regex 使用正则表达式将Maya ASCII命令拆分为片段
我一直在努力编写一个单行正则表达式来拆分我需要的所有内容。在我第二次重新评估我的数据之前,我真的想用尽我所有的可能 目前,我一直在使用此正则表达式将一行ascii数据拆分为片段:Regex 使用正则表达式将Maya ASCII命令拆分为片段,regex,python-2.7,maya,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"'] 我真正想要的是捕获字符串引号中的文
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)]
请参阅re.findall(r')([^“\]*(?:\.[^“\\]*)”([^“\\]*)“([^\s();]+)”行中的x,y的Try
[“{}{}}.”格式(x,y)]
,请参阅//结果:[('''setAttr'),(''-s'),(''2'),('.iog[0].og','',这为我提供了一个完全符合我需要的元组列表。我知道这非常挑剔,但是否可以将其简化为一个一维列表,或者我应该在其上运行一个iterable来折叠它?我的代码输出['setAttr','-s','2','.iog[0]
糟糕,我没有正确运行它。现在我得到你的结果了。非常感谢Wiktor~!!