【发布时间】:2018-06-20 21:10:35
【问题描述】:
假设我有一个可以用几种不同方式格式化的字符串,例如:
- “语言:(ruby AND python)角色:(软件工程师或数据 科学家)”
- “角色:(软件工程师或数据科学家)语言:(ruby AND python)”
- “语言:'python'角色:'软件工程师'”
- “语言:(ruby AND python)角色:(软件工程师或数据 科学家)”
- “语言:'python'角色:'软件工程师'”
- “语言:'python'
我想解析这个字符串,确定字符串中是否存在role:,然后捕获与“角色”相关的任何单词,不包括未包含在关闭参数)中的任何单词或'... 所以在本例中,"languages:'python'role:'software engineer'" 将返回“软件工程师”,"role:(software engineer or data scientist) languages:(ruby AND python)" 将返回“软件工程师或数据科学家”。
有没有办法用像单词边界这样的东西来做到这一点?具体来说,role: 上匹配后的区域将由引号或() 分隔?
【问题讨论】:
-
试试
s.scan(/role:\(([^()]+)\)/),或者如果你只希望每个字符串匹配1个,s[/role:\(([^()]+)\)/, 1] -
@WiktorStribiżew - 这适用于 parens 案例,我正在尝试稍微调整您的正则表达式以涵盖
"languages:'python' role:'software engineer'"和"languages:'python'role:'software engineer'"案例! -
做到了。谢谢@WiktorStribiżew。想要将其添加为答案,以便我将您的答案归功于您?