正则表达式,匹配“UnQualified”字符串

时间:2012-06-06 10:09:19

标签: regex

测试数据

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”)作为匹配返回,这将导致替换中的错误结果。

在机智的尽头!

会在这里感谢一些帮助。

2 个答案:

答案 0 :(得分:1)

你很亲密

问题在于)和“被视为字边界

因此,如果您将这些例外添加到字符类中,那么

[^.]\bTestCase\b[^").]

你的正则表达式只匹配第一次出现的TestCase

更新1

enter image description here

顺便说一句,看看你的样本输入,我认为“TestCase”作为一个正则表达式也可以。但也许你有更多边缘案例

答案 1 :(得分:1)

我认为这就是你要找的东西:

(?<!\.)\bTestCase\b(?!\.)

换句话说,您希望匹配整个单词TestCase(即,不在其他单词字符之前或之后),但如果它紧跟在.之前或之后,则不会。这是一个稍微整洁的版本:

(?<!\.\w)TestCase(?!\.\w)

你写这个问题的方式,听起来你也想要排除括号前面或后面的匹配,比如(TestCaseTestCase),但我终于意识到你只是不想要在比赛中包括parens。用负面外观([^.](?<!\.))替换否定字符类((?!\.]))符合该要求,因为外观不会消耗它们匹配的内容。