如何用单个正则表达式提取INTERFACE模式中的指定参数?
解决INTERFACE参数提取的正则问题
场景说明:
存在两种INTERFACE调用模式,需要提取参数中的'A'、'B'、'C'以及'E'、'F',示例输入文本:INTERFACE(A, B, C, D) and INTERFACE(E, F, G).之前尝试使用正则
INTERFACE\((.+),(.+),(.+),但匹配含4个参数的模式时,捕获组1会同时包含A和B,不符合预期。需要用单个正则实现目标参数提取,自动丢弃D、G这类多余内容。
可行的正则表达式
INTERFACE\(([^,]+),\s*([^,]+),\s*([^,]+)(?:,\s*[^)]+)?\)|INTERFACE\(([^,]+),\s*([^,]+)(?:,\s*[^)]+)?\)
正则逻辑说明
[^,]+:精准匹配单个参数内容,替代之前的.+贪婪匹配,避免一次性捕获多个参数\s*:兼容参数之间可能存在的空格,适配不同格式的输入文本(?:,\s*[^)]+)?:非捕获组,用于匹配并忽略后续多余的参数(如D、G),?标记该部分为可选,同时适配3参数、4参数的INTERFACE模式- 正则用
|分隔两种匹配分支:- 第一个分支匹配含3个及以上参数的INTERFACE,捕获前3个参数
- 第二个分支匹配含2个及以上参数的INTERFACE,捕获前2个参数
捕获组对应结果
- 匹配
INTERFACE(A, B, C, D)时:捕获组1=A,捕获组2=B,捕获组3=C - 匹配
INTERFACE(E, F, G)时:捕获组4=E,捕获组5=F
将示例文本代入该正则,即可准确提取所有目标参数,不会出现捕获组内容混叠的问题。
内容的提问来源于stack exchange,提问作者user10217630
相关产品推荐
相关产品推荐

