在数组中拆分字符串

时间:2017-03-15 03:30:13

标签: python arrays regex parsing

我正在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的新手,我的第一个任务。

5 个答案:

答案 0 :(得分:1)

把所有内容都放到括号和exec:

if

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

剥离命令ID前缀对于regular expression来说是一个很好的工作:

>>> 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)。”

这个解释如何清楚地表明: - )

答案 3 :(得分:0)

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

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

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]

答案 4 :(得分:0)

您可以使用简单的正则表达式将大括号中的第一个字母字符省略为:

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)