2016-03-01 2 views
1

Я пытаюсь добавить номер 9 до определенного шаблона в файл, содержащий много EAN воспользуйтесь, как в этом примере:Regex: добавление номера перед конкретный шаблон номер найден

7,82897E+11 50 MATCHS DE HOCKEY 39,95 23,97 40 1 0 0 
7,82924E+11 EINSTEIN 34,95 20,97 40 1 0 0 
15 BEAUX LIVRES & SCIENCE 94,85 56,91 40 3 0 0 
7,82101E+11 SCIENCE COMME VOUS NE L'AVEZ 34,95 20,97 40 1 0 0 

Я специально поиски EAN (которые находятся в начале строки данных), который начинается с 7,8 или 7,9, и я должен добавить 9 до этих чисел.

Таким образом, картина будет выглядеть как 9,78xxx или 9,79xxx после замены.

Я использовал это регулярное выражение, чтобы найти такие строки:

\t\t[7][,][8|9] 

Два \t\t служит мне не заменить номер после первой в строке.

Я думал об этом: \t\t[9],[7][8|9] но последняя часть [8|9] не работает, как я ожидал ... Я не знают, как просто поместить Найденное число (8 или 9) ...

Надеется, что это возможно!

Спасибо за помощь! Очень ценится.

+3

Как указано в [regex tag info] (http://stackoverflow.com/tags/regex/info), все вопросы с этим тегом должны также содержать тег, определяющий применимый язык программирования или инструмент. –

+0

класс символов '[89]' не нуждается в чередовании '|'. –

+0

В зависимости от языка, который вы используете, вы можете использовать ссылку на группу, например '\ 1' или' \ 2'. Или просто используйте два регулярных выражения: один для 7.8 и один для 7.9 –

ответ

1

Вы можете использовать следующие регулярные выражения на основе замены:

^([ \t]*)7,([89]) 

И заменить ${1}9,7$2 (или просто $19,7$2 если JavaScript, \g<1>9,7\2 в Python, \19,7\2 в POSIX (потому что POSIX BRE поддерживает только до 9 обратных ссылок), или \019,7\2 в некоторых странных ароматах регулярных выражений).

Вместо [ \t] вы можете использовать \s сокращенный класс символов, если он поддерживается.

См regex demo

Также обратите внимание, что [8|9] матчи 1 символ: 8, | или 9. Характер трубы теряет свое особое значение внутри character class.

Регулярное выражение пробоя:

  • ^ - начало строки
  • ([ \t]*) - (группа 1), ноль или более пробелов или вкладки
  • 7, - последовательность символов 7,
  • ([89]) - (Группа 2) либо 8, либо 9.

Если вам необходимо сопоставить начало строк, вы можете использовать многострочный флаг или встроенную версию или специальный флаг.

+0

Вам нужно захватить пробелы? –

+1

Если пробел должен быть сохранен на выходе, мне нужно захватить пробелы. –

0

Ваш шаблон поиска может быть

/^([\t]*)([7][,])([8|9])/

замена может быть:

$19,7$3

это изменит ваш образец из

7,82897E + 11 50 вышлет DE HOCKEY 39,95 23,97

к:

9,782897E + 11 50 вышлет DE ХОККЕЙ 39,95 23,97

Что он делает:

а) поиск:

он разбивает поиск на три groupsmarked по (..)

1) начало строки

2) делает строка начинается с 7,

3) он следовал либо или

в subtitution он добавляет строку 9,7 и ссылаюсь к третьей группе, используя $3 это добавляет 8 или 9 Остальная часть строки остается нетронутой.

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