【发布时间】:2011-12-06 12:11:02
【问题描述】:
我在编写正则表达式时遇到了一些问题,我很想修改正则表达式语法的所有语言元素,但遗憾的是我在这个特定的工作项目上的时间不多了,所以我不得不听从那里更强大的正则表达式大师:)
平台
这是使用 .NET 正则表达式引擎运行的。到目前为止,我已经使用 Expresso 创建了模式。
目前的模式
^ (? (?#这里的量词简直太贪心了,我还以为只是个懒人 修饰符“?”合适吗?) (?# 但是我不得不用积极的眼光来哄它 断言???懒人 '*?'对它自己感到困惑的Expresso?) .*?(?=\([^(]+\)$|$) ) (?# 如果有逗号分隔的参数,则处理前导逗号) (\(\s*(\s*,?\s* (?# 所有这些参数都是可选的,但至少其中一个必须 存在以将尾随括号限定为参数) (C\s*=\s*(?测试用例
PA(90)M(S=125.00 %,B=2011) PA(90)M(S=125.00 %) PA(90)中号 PA(90)M(S=125.00 %,B=2011) 表(任意表括号)(p=参数,s=125.00%) BaseTable(TableDetail)(B=2011,P=ProjectionArguments,S=115.00%,U=5.00%) BaseTable(TableDetail)( B = 2011 , P = ProjectionArguments , S = 115.00 %, U = 5.00 %) 基表(带空格)(B = 2011,P = ProjectionArguments,S = 115.00 %,U = 5.00 %) 仅(ASuccessfulMatch)(S=125.00 %,P = CMI_2009_F [1.25%] + 1.25%) 仅(部分匹配)问题
除了最后一个之外,以上所有都产生了很好的匹配。我需要将整个最后一个案例Only(APartialMatch) 全部包含在命名的捕获组BaseTable 中。
Only(APartialMatch) 需要与上一个匹配项 Only(ASuccessfulMatch) 消除歧义。
非常感谢任何帮助!干杯!
更新
jsobo 提供了一个修正的正则表达式模式,推动了解决方案的发展。它只解释了尾随括号之前的一对任意括号 - 最终是我如何构建调查的缺陷(许多道歉)。我希望对模式进行修正,以明确区分包含参数的尾随括号对和BaseTable 子捕获中可能存在的任何其他括号。
因此,一些更新的测试用例将是:
基表(带空格)表格资料(更多表格资料)(B = 2011,P = ProjectionArguments,S = 115.00 %,U = 5.00 %) 基表(带空格)表材料(更多表材料)其他表材料(还有更多表材料)(B = 2011,P = ProjectionArguments,S = 115.00 %,U = 5.00 %) 基表(带空格)表材料(更多表材料)其他表材料(还有更多表材料)最终基表材料(B = 2011,P = ProjectionArguments,S = 115.00 %,U = 5.00 %)【问题讨论】: