помощь grep: меняем 1 на 1-й

  • Автор темы Автор темы wlad1973
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

wlad1973

Участник
Топикстартер
Сообщения
10
Реакции
0
народ подскажите а то запарился
пытаюсь заменить в grep следующие объекты:
Заезд 1.
Заезд 2.
итд
Заезд 98.
Заезд 99.

Чтобы получилось:
Заезд 1-й.
Заезд 2-й.
итд
Заезд 98-й.
Заезд 99-й.

в grep пишу: (\d)
заменить на $1-й

получается что цифры от 0 до 9 меняет а числа типа 98 99 нет.
пытался сделать (\d{2}) но меняет только двузначные как сделать подскажите? Зарарился уже
 
Ответ: помощь grep

Пишете:
поиск: (\d{1,2})
замена: $1-й
 
Ответ: помощь grep

спсасибо все получилось оказывается все так просто
я еще пробовал (\d[0-9]+) по идее он должен тоже менять но опять меняет только двухзначные а однозначные нет.
А так еще раз спасибо
 
Ответ: помощь grep

Еще один вариант:
Найти: (\d\d?)
Заменить: $1-й
 
Ответ: помощь grep

\d+
на
$0-й
 
Ответ: помощь grep

\d+
на
$0-й

супер ответ работает для всех составных цифр. Спасибо Виталий
 
Ответ: помощь grep

еще вариант:
[0-9]+
на
$0-й
 
Ответ: помощь grep

Сюда же вопрос, чтобы не плодить темы.

Есть конструкции типа: "рис. 8.ххх а" "рис. 8.ххх а, б"
Они могут быть в скобках, а могут - просто по тексту.

Я хотел бы в таких случаях после номера рисунка поставить thin spase, а букву - курсивом.
Если не получается автомат, то хотя бы пусть ищет, а я ручками доделаю - всяко быстрее и не пропущу.
Пытаюсь соорудить конструкцию типа ( \w)(?<=рис.~s\d.\d+) - посылает.
Если поиск вперёд - то он нормально находит любой символ (.) перед этой канителью, например: .(?=рис.~s\d.\d+)
если тупо пишу .(?<=рис.~s\d.\d\d), выделяет последнюю цифру двузначного номера рисунка.

Не поможете разобраться?
 
Ответ: помощь grep

Есть одна идейка.
По-видимому, GREPу трудно выполнить сразу два условия - и выполнять положительный (или же отрицательный) просмотр вперед (или же назад), и брать нестрого определенное число цифр. Т.е., я вам предлагаю для простоты отдельно просмотреть для однозначных, двузначных и трехзначных номеров рисунка, идущих в вашем примере после восьмерки.
Вот строка поиска, которая не работает:
(?<=рис\.~s\d.\d{1,3})( )([а|б])
Эта тоже:
(?<=рис\.~s\d.\d+)( )([а|б])
А эта работает:
(?<=рис\.~s\d.\d{3})( )([а|б]) (для трехзначных номеров)
 
Ответ: помощь grep

NNN5 сказал(а):
А эта работает:
(?<=рис\.~s\d.\d{3})( )([а|б]) (для трехзначных номеров)
Да, Виталий мне уже показал такой текст:
Внимание регулярное выражение содержит ошибки:
preg_match_all() [function.preg-match-all]: Compilation failed: lookbehind assertion is not fixed length at offset 17
Хотя интересно, что для просмотра вперёд вроде такой фокус с образцом переменной длины проходит.
Наверное можно вместо ([а|б]) поставить (\w). Т.е. указать, что далее следует одна буква, а не слово. Всё равно буду делать на полуавтомате, так что предлоги не захвачу :)
 
Ответ: помощь grep

Интересно другое: под лозунгом "загрузи pdf, спаси дерево" по вот этой ссылке http://oreilly.com/catalog/9780596517069/index.html за $9.99 продается книга GREP in InDesign CS3 By Peter Kahrel
Всего 47 страниц. Хоро-о-шая!
Буду теперь читать...
 
Ответ: помощь grep

А вот что там написано про ограничения, которые действительно имеет Positive Lookahead в отличие от Lookbehind:
Lookbehind Limitation
Lookbehind has a limitation in that the expression that it contains must always match items of the same length. This means that to find digits preceded by Figure or Figures you cannot use (?<=Figures?\s)\d because the words Figure and Figures are not the same length. Instead you need to spell out the possibilities:
((?<=Figure)|(?<=Figures))\s\d
Here the workaround is simple, but that’s not always the case. Mastering Regular Expressions by Jeffrey E. F. Friedl (O’Reilly) notes that all implementations of GREP have this limitation, so InDesign’s GREP behaves like that in any other application. According to Friedl, variable-width lookbehind is too complex to handle. As we have seen, the limitation does not apply to lookahead.

Т.е., всё так и есть. Все правы!
 
Статус
Закрыто для дальнейших ответов.