gpt4 book ai didi

python - 用于使用一组匹配多个子字符串的正则表达式?

转载 作者:行者123 更新时间:2023-11-28 16:48:35 24 4
gpt4 key购买 nike

我正在尝试使用 Python 中的 RegEx 解析具有未知数量元素的字符串。这是示例:

>>>> import re
>>>> re.match("\=( A([0-9]+))*", "= A1 A2 A3 A4").groups()[1::2]
('4',)

我希望有:

('1', '2', '3', '4',)

怎样才能得到预期的结果?

编辑:

re.findall 对我不起作用。让我举一个更好的例子:

我要匹配以下字符串:

_func(cmd, param1, param2, param3, param4)_

我事先不知道参数的数量。我希望使用以下代码解决它:

>>> re.match("(\w+)\(cmd(, (\w+))*\)", "func(cmd, param1, param2, param3, param4)")

但这不起作用,因为组 ()* 没有扩展到很多项目,而只使用了最后一个。有什么想法吗?

最佳答案

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 不会尝试使用它来启动匹配组),然后是文字字符串 cmd,然后是匹配任何文字 ) 的匹配组特点;然后匹配组用 ) 关闭,文字 ) 匹配完成函数调用的实际 ) 。在此模式匹配后,匹配对象会将第 1 组设置为函数调用中有趣的参数。

接下来我们设置 s = m.group(1) 然后让 re.findall() 为我们提取参数。

关于python - 用于使用一组匹配多个子字符串的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10889564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com