首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >函数参数的正则表达式

函数参数的正则表达式
EN

Stack Overflow用户
提问于 2017-08-16 14:11:15
回答 1查看 90关注 0票数 1

我对regex相当缺乏经验,但我需要一个正则表达式来匹配函数的参数。此函数将多次出现在字符串中,我希望返回所有参数的列表。

正则表达式必须匹配:

  1. 字母数字和下划线
  2. 内引号直接在括号内
  3. 在特定函数名称之后

下面是一个字符串示例:

代码语言:javascript
运行
复制
Generic3(p, [Generic3(g, [Atom('_xyx'), Atom('y'), Atom('z_')]), Atom('x_1'), Generic2(f, [Atom('x'), Atom('y')])])

我想把这个作为输出:

代码语言:javascript
运行
复制
['_xyx', 'y', 'z_', x_1', 'x', 'y']

到目前为止我所拥有的是:

代码语言:javascript
运行
复制
(?<=Atom\(')[\w|_]*

我这么说是为了:

导入re

代码语言:javascript
运行
复制
s = "Generic3(p, [Generic3(g, [Atom('x'), Atom('y'), Atom('z')]), Atom('x'), Generic2(f, [Atom('x'), Atom('y')])])"
print(re.match(r"(?<=Atom\(')[\w|_]*", s))

但这个只是打印None。我感觉自己就快到了,但我遗漏了一些东西,也许是Python方面的东西,可以真正返回匹配项。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-16 14:13:30

正则表达式接近,您需要添加\W字符以找到下划线:

代码语言:javascript
运行
复制
s = "Generic3(p, [Generic3(g, [Atom('_xyx'), Atom('y'), Atom('z_')]), Atom('x_1'), Generic2(f, [Atom('x'), Atom('y')])])"

r = "(?<=Atom\()\W\w+"

final_data = re.findall(r, s)

您也可以尝试这样做:

代码语言:javascript
运行
复制
import re

s = "Generic3(p, [Generic3(g, [Atom('_xyx'), Atom('y'), Atom('z_')]), Atom('x_1'), Generic2(f, [Atom('x'), Atom('y')])])"

new_data = re.findall("Atom\('(.*?)'\)", s)

输出:

代码语言:javascript
运行
复制
['_xyx', 'y', 'z_', 'x_1', 'x', 'y']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45715893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档