Что я делаю не так с этим негативным прогнозом? Отфильтровывание определенных чисел в регулярном выражении

#python #regex #sublimetext3

#python #регулярное выражение #sublimetext3

Вопрос:

У меня есть большой фрагмент кода, созданный программным обеспечением. Каждая инструкция имеет идентификационный номер, и я должен изменять только определенные числа:

 grr.add(new GenericRuleResult(RULEX_RULES.get(String.valueOf(11)), new Result(0,Boolean.FALSE,"ROSSO")));
grr.add(new GenericRuleResult(RULEX_RULES.get(String.valueOf(12)), new Result(0,Boolean.FALSE,"£££")));
etc...
 

Теперь я использую SublimeText3 для быстрого изменения всех неправильных строк с этим регулярным выражением:

 Of((11|14|19|20|21|27|28|31))), new Result(
 

Это регулярное выражение выше позволило мне поместить «ROSSO» (красный) в каждую строку, содержащую эти числа. Теперь я должен поместить «VERDE» (зеленый) в оставшиеся строки. Моя идея состояла в том, чтобы добавить a ?! в регулярное выражение для поиска всех строк, НЕ СОДЕРЖАЩИХ эти числа.

С веб-сайта Regex101 я получаю описание регулярного выражения:

 Of matches the characters Of literally (case sensitive)
( matches the character ( literally (case sensitive)
    Negative Lookahead (?!11|14|19|20|21|27|28|31)
    Assert that the Regex below does not match
       1st Alternative 11
       etc...
 

Так почему я не нахожу строки, содержащие 12, 13, 14 и т.д.?

Редактировать: фактическое регулярное выражение: Of((?!11|14|19|20|21|27|28|31))), new Result(

Комментарии:

1. Пожалуйста, покажите фактическое регулярное выражение, которое вы пытаетесь использовать, с негативным прогнозом.

2. готово, спасибо. Я думал, что это можно вывести из последнего раздела кода

3. отрицательный прогноз не изменяет положение курсора, это помогает?

Ответ №1:

Ваша проблема в том, что вы предполагаете, что отрицательный прогноз изменяет положение курсора, это не так.

То есть отрицательный прогноз формы (?!xy) просто проверяет, что следующие два символа не xy являются. Затем он не проглатывает два символа из текста. Как следует из его названия, он просто смотрит вперед с того места, где вы находитесь, не двигаясь вперед!

Таким образом, если вы хотите сопоставить дополнительные вещи, помимо этого утверждения, вы должны:

  • отрицательно утверждать, что это не так xy ;
  • затем используйте два символа, какими бы они ни были;
  • затем продолжайте сопоставление.

Так что попробуйте что-то вроде:

 Of((?!11|14|19|20|21|27|28|31)..)), new Result(
 

Комментарии:

1. Действительно, это работает. Большое вам спасибо. Любое предложение о том, где учиться, чтобы больше узнать об этом и концепции курсора?