我需要帮助使用正则表达式将字符串中的这些参数提取/拆分为参数和值组。
Input -> collection_a=['U1', 'U2'], collection_b=['U1', 'U2']
output -> Group Parameter = collection_a
Group Value = ['U1', 'U2']
Group Parameter = collection_b
Group Value = ['U1', 'U2']
Input -> collection=['U1', 'U2'], callback_macro=utils.user_email(user_id=$$)
output -> Group Parameter = collection
Group Value = ['U1', 'U2']
Group Parameter = callback_macro
Group Value = utils.user_email(user_id=$$)
Input -> collection=['U1', 'U2'], callback_macro=utils.user_email(user_id=$$, config={'user': 'ADMIN'})
output -> Group Parameter = collection
Group Value = ['U1', 'U2']
Group Parameter = callback_macro
Group Value = utils.user_email(user_id=$$)
Input -> collection=['U1','U2'], callback_macro=string.replace(value=$$, pattern=^(.*)$, replacement={'user': $1})
output -> Group Parameter = collection
Group Value = ['U1', 'U2']
Group Parameter = callback_macro
Group Value = string.replace(value=$$, pattern=^(.*)$, replacement={'user': $1})
我正在使用这个正则表达式/((\s*(?<parameter>[a-z_]+)\s*=\s*(?<value>((?!(,\s*[a-z_]+)\s*=\s*).)*)),{1,})/g
,它在情况1和情况2中工作得很好,但在情况3和4中会中断,因为在情况3和4中,它在参数的值中包含=
。
正则表达式链接-https://regex101.com/r/U2CaLb/1
1条答案
按热度按时间wd2eg0qa1#
很难将这些需求分开。
你可以只匹配 key/value 并将它们放入数组中。
注意,第三个输入样本不遵循其他模式。
这里有一些选项可供选择。
***方法1***此正则表达式使用单级大括号匹配作为其一部分。
https://regex101.com/r/fnPb6e/1
对于 * 平衡大括号文本 *、PCRE或Not-Net引擎:
***方法二***此正则表达式是
()
,[]
,{}
的简单嵌套版本其中独立地找到平衡端以完成。
https://regex101.com/r/dgWMDZ/1
***方法3***这个正则表达式会平衡嵌套在里面的不同大括号
这将允许更多的内部支撑结构
项,并且在此场景中可能不需要,但将来可能需要。
这是增强的 * 方法2* 版本,包含该功能。
https://regex101.com/r/ZubSke/1
***方法4***与方法3相同,但增加了对简单单引号或双引号字符串的处理。
此正则表达式将混合在任何其他分隔符对中的引号解析中
平衡,以及这些分隔符之外。
请注意,有一个通过垃圾收集器
[^,\r\n]
的传递来获取catch unbalanced。分隔符。这是设计好的,因为平衡的文本实际上只是充实过程中的一个建议。
https://regex101.com/r/090iI7/1