регулярное выражение: замена первого вхождения символа в строке - PullRequest
2 голосов
/ 20 июля 2010

У меня есть эта строка: -

ABCDE / что-то что-то: XYZ = 0, JKLM = 0 / что-то: Some_value

Что такое регулярное выражение, так что только первое двоеточие (:) заменяется на подчеркивание (_)?

Ответы [ 4 ]

1 голос
/ 20 июля 2010

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

(?<!:.*):

Будет соответствовать двоеточию, только если ранее не было найдено ни одного другого двоеточия.

Однако, поскольку вы заменяете только один символ, а не набор символов, я бы предложил использовать встроенную в язык функцию «заменить». Вы получите лучшую производительность и удобочитаемость.

1 голос
/ 20 июля 2010

В стандартных системах вы просто пишете:

s/:/_/

Чтобы выполнить глобальную замену (заменяя каждый экземпляр двоеточия на подчеркивание), вы должны добавить квалификатор (часто «g») после замены.

Различные языки используют разные обозначения для регулярных выражений, поэтому подробный ответ зависит от целевого языка. Однако то, что я написал, работает в «sed», «ed», «vi», «vim» и Perl.

1 голос
/ 20 июля 2010

Просто сопоставьте две группы - первая - все до первой двоеточия; во-вторых, все после этого. Затем просто восстановите строку с подчеркиванием на месте.

s/([^:]*):(.*)/\1_\2/

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

0 голосов
/ 20 июля 2010

, если вы используете * nix и у вас есть такие инструменты, как sed

$ echo "ABCDE/Something something:XYZ=0, JKLM=0/SOMETHING Something:some_value" | sed 's/:/_/'
ABCDE/Something something_XYZ=0, JKLM=0/SOMETHING Something:some_value

и если вы используете bash в качестве оболочки

$ var="ABCDE/Something something:XYZ=0, JKLM=0/SOMETHING Something:some_value"
$ echo ${var/:/_}
ABCDE/Something something_XYZ=0, JKLM=0/SOMETHING Something:some_value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...