Замена с учетом регистра для поиска без учета регистра с помощью регулярных выражений - PullRequest
3 голосов
/ 27 января 2010

Хорошо, я заменяю следующее регулярное выражение:

 Input: ([Ll])ocation
Output: \1abel

Это заменяет Location на Label и location на label. Однако, если я хочу заменить location на geocode и Location на Geocode, могу ли я сделать это с помощью одного регулярного выражения?

В настоящее время я выполняю поиск и замену в notepad ++, но у меня была эта проблема в нескольких диалектах регулярных выражений.

Ответы [ 3 ]

1 голос
/ 28 января 2010

EditPad Pro сделает это, если вы выберете опцию «Адаптировать регистр» при замене. На самом деле это не функция регулярных выражений, а функция, которая поддерживается некоторыми инструментами, которые выполняют поиск и замену. Указанные инструменты обычно используют регулярные выражения, но это не обязательно; на самом деле, я не думаю, что регулярные выражения могли бы сильно помочь в реализации такой функции.

1 голос
/ 27 января 2010

Вот вы:

#!/usr/bin/perl -w

$str1 = 'Location Loc10';
$str2 = 'location Loc10';

$str1 =~ s/(L(?{ $g = 'G'; }) | l(?{ $g = 'g'; }) )ocation/${g}eocode/x;
print "$str1\n"; # prints Geocode Loc10

$str2 =~ s/(L(?{ $g = 'G'; }) | l(?{ $g = 'g'; }) )ocation/${g}eocode/x;
print "$str2\n"; # prints geocode Loc10

N.B. В этом фрагменте кода используется экспериментальное утверждение нулевой ширины для оценки любого кода Perl. Только здесь, потому что вы спросили об этом, я бы не рекомендовал бы использовать такие выражения, гораздо лучше сделать несколько замен. И я действительно сомневаюсь, что Notepad ++ поддерживает это.

0 голосов
/ 27 января 2010

В perl:

echo Location | perl -pe 's/(l)ocation/$1^lc($1)^"geocode"/ei'
Geocode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...