2011-10-18 51 views
0

我的工作對我公司的新價目表,我需要改變所有的價格同比增長4%。 我正在使用適用於RegEx的InDesign(數字調整器)腳本。 在文本中有兩種形式數: 1.200 我成功地改變使用的第一個,它乘以爲1.04(\ d \ d {3})。 問題是如果使用(\ d {3})更改3位數字,它也會更改之前的數字,但只會更改點號之後的部分。 我需要一個匹配3位數的正則表達式,但不是 **,或者可以選擇一個匹配它們的腳本,所以腳本可以一次重新計算所有的價格。 此外,文章數量是這樣的:45.62.54,我需要改變一些價格是兩位數,所以我需要排除這種字符串或前或後點任意兩位數字! 我不是程序員,所以我很努力去理解正則表達式系統。正則表達式來改變價格在InDesign

+0

我不是一個程序員,所以我努力理解正則表達式系統。 - 我不會擔心,大多數程序員很難理解正則表達式系統也笑 – Purplegoldfish

回答

0

此正則表達式:

\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,因爲它不是有效的數字。如果你有其他限制讓我知道。

+0

非常感謝FD,我在結尾加上另外一個問題,如果你能幫助我非常感謝! – Gardus

+0

好的,我在trasforming了 「1.200」 以及 「456」 的價格使用succeded X104,(\ d {3} \ d {3}。)(\ d \ d {3}。):100,(< !\))\ d {3} x104,(\ d {2}。\ d {3}):100。問題是如果我使用(?<!\。)\ d {2} x104,它會將商品編號的前兩位數相乘。我怎樣才能讓它在他們之前和之後忽略數字? – Gardus

+0

@Gardus正則表達式比忽略事物更好地匹配事物。所以,如果你只匹配你需要匹配的東西而不是匹配所有東西,然後嘗試忽略某些東西,那就更好了。這是你如何忽略數字。之前和之後:(?<!\。)\ d {2}(?!\。)但我不明白這可以幫助你。它也將選擇數字是大個數的部分... – FailedDev