【问题标题】:Regex to change prices in InDesign正则表达式更改 InDesign 中的价格
【发布时间】:2026-01-23 20:45:01
【问题描述】:

我正在制定公司的新价目表,我需要将所有价格更改为 4%。 我正在使用适用于 RegEx 的 InDesign(数字调整器)脚本。 正文中有两种形式的数字: 1.200 430 我使用 (\d.\d{3}) 成功更改了第一个,将其乘以 1.04。 问题是,如果用 (\d{3}) 更改 3 位数字,它也会更改以前的数字,但只更改点之后的部分。 我需要一个匹配 3 位数字但不匹配 .** 的正则表达式,或者匹配它们两者的正则表达式,因此脚本可以一次重新计算所有价格。 另外,文章编号是这样的:45.62.54,我需要更改一些两位数的价格,所以我需要排除这种字符串或任何前后带点的两位数! 我不是程序员,所以我很难理解正则表达式系统。

【问题讨论】:

  • 我不是程序员,所以我很难理解正则表达式系统。 -- 我不会担心这个,大多数程序员都很难理解正则表达式系统lol

标签: regex adobe-indesign digits


【解决方案1】:

这个正则表达式:

\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,因为它不是有效数字。如果您有其他限制,请告诉我。

【讨论】:

  • 非常感谢FD,我最后又补充了一个问题,如果你能帮助我,非常感谢!
  • 好的,我已经成功地使用 (\d.\d{3}) x104, (\d{3}.\d{3} 转换了 "1.200" 和 "456" 价格) :100, (?
  • @Gardus 正则表达式比忽略事物更擅长匹配事物。因此,最好只匹配需要匹配的内容,而不是匹配所有内容然后尝试忽略某些内容。这就是您忽略数字的方式。之前和之后: (?
  • 你是对的!由于成本低于 99 欧元的零件很少,我想我会手动修复它们。你帮了大忙!!如果您的汽车需要运动型排气管,您将获得很大的折扣。
  • @Gardus :D 感谢您的提议 :)。如果它对您有帮助,请接受答案,这就足够了! :)