测试数据
1: "Abc.TestCase For TestCase By Abc.TestCase Using TestCase" --> 2 matches
2: "(Abc.TestCase For TestCase By Abc.TestCase Using TestCase)" --> 2 matches
3: "(TestCase For TestCase By Abc.TestCase Using TestCase)" --> 3 matches
4: "(Abc.TestCase For TestCase By Abc.TestCase Using Xyz.TestCase.Sub)" --> 1 match
5: "(Abc.TestCase For TestCase By Abc.TestCase Using Xyz.TestCase1)" --> 1 match
目标是获取不合格的“TestCase”
尝试了以下
[^.]\bTestCase\b[^.]
虽然这可行,但它失败了2& 3例,它将“(TestCase”“TestCase”)作为匹配返回,这将导致替换中的错误结果。
在机智的尽头!
会在这里感谢一些帮助。
答案 0 :(得分:1)
你很亲密
问题在于)和“被视为字边界
因此,如果您将这些例外添加到字符类中,那么
[^.]\bTestCase\b[^").]
你的正则表达式只匹配第一次出现的TestCase
更新1
顺便说一句,看看你的样本输入,我认为“TestCase”作为一个正则表达式也可以。但也许你有更多边缘案例
答案 1 :(得分:1)
我认为这就是你要找的东西:
(?<!\.)\bTestCase\b(?!\.)
换句话说,您希望匹配整个单词TestCase
(即,不在其他单词字符之前或之后),但如果它紧跟在.
之前或之后,则不会。这是一个稍微整洁的版本:
(?<!\.\w)TestCase(?!\.\w)
你写这个问题的方式,听起来你也想要排除括号前面或后面的匹配,比如(TestCase
或TestCase)
,但我终于意识到你只是不想要在比赛中包括parens。用负面外观([^.]
和(?<!\.)
)替换否定字符类((?!\.])
)符合该要求,因为外观不会消耗它们匹配的内容。