2017-06-28 113 views
-11

在字符串中如何分离的话我有一个参数列表:使用正则表达式或以其他方式

parameters = [int commType , const char * ipAddress , const char * ipPort , int comPort , int baudRate ] 

谁能告诉我怎样才能像一个我需要的参数等我需要的数据类型将它们分开:

arguments = [commType, * ipAddress, * ipPort, comPort , baudRate ] 
data_types = [int, const char, const char, int, int] 
+0

请提供[MCVE(https://开头stackoverflow.com/help/mcve)。 – Kraay89

+0

哇......这么多投票。你可能想重新提出这个问题。 –

回答

0

假设你在第一个列表中有字符串,你可以使用split

parameters = ["int commType" ," const char * ipAddress", "const char * ipPort" , "int comPort" , "int baudRate" ] 
arguments=[ ] 
data_types = [] 

for i in parameters: 
    temp = i.split(" ")[-1] 
    arguments.append(temp) 
    data_types.append(i.replace(temp, "")) 

arguments ,data_types 

输出

(['commType', 'ipAddress', 'ipPort', 'comPort', 'baudRate'], 
['int ', ' const char * ', 'const char * ', 'int ', 'int ']) 

编辑: 将它们作为参数,你必须首先构建的命令字符串:

str_command = "def function(self," + arguments[0] + "," + arguments[1] + "," + arguments[2], +")") 

输出:

def function(self,commtype, ipAddress, ipPort) 

然后你可以使用eval评估字符串

eval(str_command) 

请注意,这不是良好的做法,并且需要注入代码,因此可能会有一些安全问题。

请仔细阅读Why is using 'eval' a bad practice?https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html

+0

我没有引号,但我试过你的答案,它不工作,它分离每个字母,如['我','N','T','','P','O','R ','t','',',',''] –

+0

@ siddiqui_902003你能提供一个工作例子吗?如果没有引号,那么它们不是字符串,所以它应该给出语法错误。 – Tbaki

+0

@ siddiqui_902003你能提供这部分代码吗,你可能会在某处引用一些引号吗?否则你不能使用拆分。 – Tbaki

1

以下是使用regexpressions的一种方法。

首先,使用re.findall让你的类型和varnames分离:

>>> import re 
>>> params = ['int commType' , 'const char * ipAddress' , 'const char * ipPort' , 'int comPort' , 'int baudRate' ] 
>>> pairs = [ re.findall('(.*) ([a-zA-Z0-9_]+$)', x)[0] for x in params] 
>>> pairs 
[('int', 'commType'), ('const char *', 'ipAddress'), ('const char *', 'ipPort'), ('int', 'comPort'), ('int', 'baudRate')] 

接下来,他们分离成两个数据结构:

>>> types, names = zip(*pairs) 
>>> types 
('int', 'const char *', 'const char *', 'int', 'int') 
>>> names 
('commType', 'ipAddress', 'ipPort', 'comPort', 'baudRate') 
+0

我没有单引号,如果你有另一个想法,然后请更新。我不知道可能是我有一个从文件生成的字符串循环并保存在列表中 –

+0

@ siddiqui_902003它是一个字符串。字符串**总是_ **用引号代表。如果遍历列表并将其保存到文件中,则引号将消失。 –

+0

你能解释一下如何删除报价 –

相关问题