3

测试数据

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)" 作为匹配项,这会导致替换的错误结果。

对此束手无策!

将不胜感激这里的一些帮助。

4

2 回答 2

1

你很近

问题是 ) 和 " 被认为是单词边界

因此,如果您像这样将异常添加到字符类

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

您的正则表达式将仅匹配第一次出现的 TestCase

更新 1

在此处输入图像描述

顺便说一句,查看您的示例输入,我认为“TestCase”作为正则表达式也可以。但也许你有更多的边缘情况

于 2012-06-06T10:12:52.777 回答
1

我想这就是你要找的:

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

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

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

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

于 2012-06-06T11:07:03.277 回答