pat = re.compile(r' A(\d+)')
lst = re.findall(pat, "= A1 A2 A3 A4")
这将返回一个列表,在您的示例中,您显示了一个元组。我想一个列表对你有用,但当然你总是可以这样做:
t = tuple(lst)
我刚刚给出的答案实际上并没有检查=
输入字符串中的 。如果你需要这样做,你总是可以使用两种模式和两个步骤:
pat0 = re.compile(r'=(?: A\d+)+')
pat1 = re.compile(r' A(\d+)')
m = pat0.search("= A1 A2 A3 A4")
if not m:
print("input string not what was expected")
else:
s = m.group(0)
lst = re.findall(pat, s)
编辑:处理您的func()
示例的代码:
s_code = "func(cmd, param1, param2, param3, param4)"
pat_recognize_args = re.compile(r'func\(cmd([^)]*)\)')
pat_parse_args = re.compile(r'[, ]+([^, ]+)')
m = pat_recognize_args.search(s_code)
if m:
s = m.group(1)
lst = re.findall(pat_parse_args, s)
当我运行上面的代码时,lst
设置为:['param1', 'param2', 'param3', 'param4']
pat_recognize_args
查找func
带有文字的文字字符串(
(在模式中以反斜杠转义,因此re
不会尝试使用它来启动匹配组),然后是文字 string cmd
,然后是匹配任何文字)
字符的匹配组; 然后匹配组用 a 关闭,)
并且有一个文字)
来匹配)
完成函数调用的实际值。在此模式匹配后,匹配对象将组 1 设置为仅来自函数调用的有趣参数。
所以接下来我们设置s = m.group(1)
然后re.findall()
为我们提取参数。