在数组中分裂字符串



我正在用python编写一个程序,该程序在文本文件中读取并执行其中的任何python命令。这些命令可能不订购,但是每个命令都有一个字母ID,例如{% (c) print x %}

我已经能够按正确的顺序将文档中的所有命令与数组分类为数组。我的问题是,如何删除(c),所以我可以在字符串上运行exec(statement)

这是完整的示例数组

[' (a) import random ', ' (b) x = random.randint(1,6) ', ' (c) print x ', ' (d) print 2*x ']

另外,我对Python非常新,我对此我的第一个任务。

您可以使用子字符串删除索引部分:

for cmd in arr:
   exec(cmd[5:])

将所有内容都送给括号并执行:

for cmd in arr:
    exec(cmd.split(") ")[-1])

剥离命令-ID前缀是正则表达式的好工作:

>>> import re
>>> commands = [' (a) import random ', ' (b) x = random.randint(1,6) ', ' (c) print x ', ' (d) print 2*x ']
>>> [re.search(r'.*?)s*(.*)', command).group(1) for command in commands]
['import random ', 'x = random.randint(1,6) ', 'print x ', 'print 2*x ']

正则零件的含义是:

  • .*?)的意思是"获取以结束语结尾的任何字符的最短组。"

  • s*的意思是"零或更多空间字符"

  • (.*)的意思是"将所有其余字符收集到组(1)。"

这种解释如何使一切清晰: - )

由于模式看起来很简单且一致,因此您可以使用正则。

这也允许(a)(abc123)作为有效IDS。

import re
lines = [
    ' (a) import random ',
    ' (b) x = random.randint(1,6) ',
    ' (c) print x ',
    ' (d) print 2*x '
]
for line in lines:
    print(re.sub(r"^[ t]+((w+))", "", line))

将输出:

 import random 
 x = random.randint(1,6) 
 print x 
 print 2*x 

如果您真的只想匹配单个字母,则将w+替换为[a-zA-Z]

您可以使用简单的正则拨号来省略括号中的第一个alpha字符为:

import re
lst = [' (a) import random ', ' (b) x = random.randint(1,6) ', ' (c) print x ', ' (d) print 2*x ']
for ele in lst:
    print re.sub("^ ([a-z])", "", ele)

最新更新