Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式将Maya ASCII命令拆分为片段_Regex_Python 2.7_Maya - Fatal编程技术网

Regex 使用正则表达式将Maya 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"'] 我真正想要的是捕获字符串引号中的文

我一直在努力编写一个单行正则表达式来拆分我需要的所有内容。在我第二次重新评估我的数据之前,我真的想用尽我所有的可能

目前,我一直在使用此正则表达式将一行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)]

请参阅re.findall(r')([^“\]*(?:\.[^“\\]*)”([^“\\]*)“([^\s();]+)”行中的x,y的

Try
[“{}{}}.”格式(x,y)]
,请参阅//结果:[('''setAttr'),(''-s'),(''2'),('.iog[0].og','',这为我提供了一个完全符合我需要的元组列表。我知道这非常挑剔,但是否可以将其简化为一个一维列表,或者我应该在其上运行一个iterable来折叠它?我的代码输出
['setAttr','-s','2','.iog[0]
糟糕,我没有正确运行它。现在我得到你的结果了。非常感谢Wiktor~!!