Regex для изменения цен в InDesign - PullRequest
0 голосов
/ 18 октября 2011

Я работаю над новым прайс-листом моей компании, и мне нужно изменить все цены с увеличением на 4%.Я использую скрипт для InDesign (Number Adjuster), который работает с RegEx.В тексте есть число в двух формах: 1.200 430 Я успешно изменил первое с помощью (\ d. \ D {3}), умножив его на 1,04.Проблема в том, что если изменить 3-значную цифру с помощью (\ d {3}), то также будут изменены и предыдущие, но только часть после точки.Мне нужно регулярное выражение, которое соответствует 3-значным, но не . **, или поочередно одно, которое соответствует им обоим, чтобы скрипт мог пересчитать все цены одновременно.Кроме того, номер статьи выглядит следующим образом: 45.62.54, и мне нужно изменить некоторые цены, которые состоят из двух цифр, поэтому мне нужно исключить этот тип строки или любые двухзначные числа с точкой до или после!Я не программист, поэтому я пытаюсь понять систему регулярных выражений.

1 Ответ

0 голосов
/ 18 октября 2011

Это регулярное выражение:

\b\d*\.?\d+\b

// \b\d*\.?\d+\b
// 
// Assert position at a word boundary «\b»
// Match a single digit 0..9 «\d*»
//    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
// Match the character “.” literally «\.?»
//    Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
// Match a single digit 0..9 «\d+»
//    Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
// Assert position at a word boundary «\b»

Сопоставляет целое число или число с плавающей точкой с необязательной целочисленной частью.

Также для вашего первого решения:

(?<!\.)\d{3}

// (?<!\.)\d{3}
// 
// Assert that it is impossible to match the regex below with the match ending at this position (negative lookbehind) «(?<!\.)»
//    Match the character “.” literally «\.»
// Match a single digit 0..9 «\d{3}»
//    Exactly 3 times «{3}»

Это соответствует 3 цифрам, которым не предшествует ..

Это регулярное выражение:

\b\d*(?:\.\d+)?\b\s+

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

...