Nic*_*tch 2 regex pattern-matching
首先,介绍一下背景。我有类似于以下内容的字符串:
((Foo.Bar.StartsWith("A")) && (Foo.Bar.EndsWith("B")))
我正在尝试将这些重新格式化为如下所示:
((Foo.Any(Bar.StartsWith("A"))) && (Foo.Any(Bar.EndsWith("B"))))
旁注: .Bar 后面的部分有时可能不包含 (),例如 .Bar == "AB" 。
我试图捕捉两个群体:Foo。和 Bar.StartsWith("<A or B>") 。我制定了以下模式,但它删除了尾随括号。
\((Foo\.)(.*?)\)
Run Code Online (Sandbox Code Playgroud)
因此,我得到的不是我想要的,而是:
((Foo.Any(Bar.StartsWith("A")) && (Foo.Any(Bar.EndsWith("B")))
这是两个括号短。
问题是我需要在 .* 中包含右括号?如果那里还有一个左括号,则匹配。我还没想好怎么做,有人知道吗?
PS - 代码是 C#.NET 但这应该无关紧要,除非解决方案涉及一些晦涩的语言特定的 RegEx 内容。
您是否有理由必须使用正则表达式来执行此操作?试图找到“匹配”对是正则表达式做得不好的事情之一。
我只会通过普通代码来完成。搜索 find "(Foo."
,然后循环遍历后续字符,保留一个计数器,记录您传递了多少个开/关括号。击中 a 时递增,击中 a 时(
递减)
。如果您点击右括号并且计数器为 0,那么这就是您需要捕获的字符串的结尾。在那一点停止捕获,把那个字符串放在Any()
你要添加的里面。然后找到下一个"(Foo."
。
那有意义吗?如果您没有真正遵循我的意思,我可能可以对它进行伪代码。当然,如果您无论如何都可以放弃正则表达式,这只是一个有效的选择。
归档时间: |
|
查看次数: |
3629 次 |
最近记录: |