2012-06-06 3 views
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 ») в качестве совпадений, которые затем приводят к ошибочным результатам i n замена.

в конце этого остроумия!

был бы признателен за помощь здесь.

ответ

1

Я думаю, что это то, что вы ищете:

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

Другими словами, вы хотите, чтобы соответствовать все слово TestCase (т.е. не до или после другого слова символ), но нет, если ему сразу предшествует или следует .. Вот немного аккуратнее версия:

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

, как вы написали этот вопрос, это звучит, как вы хотите, чтобы исключить матчи, которые предшествуют или следуют круглые скобки, как (TestCase или TestCase), но я, наконец, понял, что вы просто не» t хотите включить парнеров в матч. Замена отрицательных классов символов ([^.]) с отрицательными образами ((?<!\.) и (?!\.])) соответствует этому требованию, потому что обратные пути не поглощают то, что они соответствуют.

+0

спасибо, алан, первый работает как шарм, а также упоминает обход. Извините, что вопрос не достаточно ясен в намерении – kalki

1

Вы близки

Проблема заключается в том, что) и "считаются словоразделы

Так, если добавить исключения к классу символов, как так

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

ваше регулярное выражение будет соответствовать только первое появление TestCase

Обновление 1

enter image description here

BTW, глядя на ваш пример ввода я думаю «TestCase» как регулярное выражение будет работать так же хорошо. Но, может быть, у вас есть более крайние случаи

+0

именно мне нужно игнорировать символы "(" & ")" не знал, что они считаются границами слов, отредактировали вопрос, чтобы указать это – kalki

+0

Просто добавьте их в класс символов. Позвольте мне знать, если у вас есть еще вопросы. – buckley

+0

Хорошо, что тогда это соответствовало бы «(TestCase» и «TestCase»), которое затем приведет к ошибочным результатам замены. Извините, что вопрос не достаточно ясен по этому поводу. – kalki

Смежные вопросы