假设我有一个字符串,可以用几种不同的方式格式化,例如:
我想解析这个字符串,确定字符串中是否存在role:,然后捕获任何与“角色”相关的单词,不包括那些没有包装在“)”或“'”中的单词.因此,在本例中,"languages:'python'role:'software engineer'"将返回“软件工程师”,而"role:(software engineer or data scientist) languages:(ruby AND python)"将返回“软件工程师或数据科学家”。
有什么方法可以用像单词边界这样的东西来做吗?具体来说,在role:上匹配后的区域将用引号或()分隔。
发布于 2018-06-20 21:35:13
你可以用
s.scan(/role:(?:\(\K[^()]+(?=\))|'\K[^']+(?='))/)详细信息
role: -一个文字子字符串(?: -交替非捕获组的开始:\( -a ( char\K - https://www.regular-expressions.info/keep.html丢弃到目前为止匹配的文本[^()]+ - 1+字符( (和)除外)(?=\)) -a )应跟随当前位置
| -或' -a ' char\K -匹配重置操作符丢弃到目前为止匹配的文本[^']+ - 1+字符( '除外)(?=') -必须马上在右边有' char) -交替组的末端。注意:如果您不关心是否存在)或尾随',请移除外观以简化正则表达式。
s = "languages:(ruby AND python) role:(software engineer or data scientist) role:(software engineer or data scientist) languages:(ruby AND python) languages:'python' role:'software engineer' languages:(ruby AND python)role:(software engineer or data scientist) languages:'python'role:'software engineer' languages:'python'"
puts s.scan(/role:(?:\(\K[^()]+(?=\))|'\K[^']+(?='))/)输出:
software engineer or data scientist
software engineer or data scientist
software engineer
software engineer or data scientist
software engineerhttps://stackoverflow.com/questions/50957067
复制相似问题