2012-08-14 365 views
1

好吧,我有這個字符串:正則表達式來提取溫度和溫度範圍從字符串

-64.5(Ethylene glycol monobutyl ether acetate)- -24.4 deg C(N-Methylpyrrolidone) 

我期待的最終結果是這樣的:

-64.5 - -24.4 deg C 

短線在納入化學名稱和負數以及破折號分隔符表示溫度範圍正在殺死我!

任何幫助將不勝感激!

例輸入:

> 1000 °C (> 1832 °F) 
> -64,6 deg C (Ethylene glycol monobutyl ether acetate) 
-30 to -15 deg C (-22 to 5 deg F) 
-64.5(Ethylene glycol monobutyl ether acetate)- -24.4 deg C(N-Methylpyrrolidone) 

預期成果:

two results: > 1000 deg C and > 1832 deg F 
> -64.6 deg C 
-31 - -15 deg C 
-64.5 - -24.4 deg C 

很抱歉,如果我沒有描述什麼,我試圖完成得很好!

+0

你能給輸入一些其他的例子嗎?根據你所描述的'/([0-9.-]|deg C)/'會起作用,但我相信這太具體了。 – VoteyDisciple 2012-08-14 16:35:04

+0

不確定:**> 1000℃(> 1832°F)** **或> -64,6攝氏度(乙二醇單丁醚乙酸酯)**或** - 30至-15℃(-22至5°F)**我真正想要的是溫度數據本身或作爲一個範圍。所以只要刪除包裹內的垃圾將無法工作,除非沒有數字後面加上攝氏度或度數......看到簡單! :) – 2012-08-14 16:50:55

+0

添加示例的問題,而不是評論!這還不完全清楚你實際要求什麼? – 2012-08-14 17:00:38

回答

0

這似乎做你想做的,但到目前爲止,它不分裂/刪除括號的溫度,因爲目前尚不清楚爲什麼例1中應該有兩個結果,而例3只有一個結果? (是否相關,一個是範圍,另一個不是?)

它的工作原理是刪除不需要的位,只留下相關信息 - 它使用正則表達式負向預測(?! .. )指定如果當前位置與前瞻相匹配,則不應在此位置接受匹配。

(另外,它改變to-°C to deg C按您的預期值。)

<cfsavecontent variable="TempsRx">(?x) 

    ## Exclude numbers, "deg", "C", "F", and GT sign. 
    (?! 
     \d+(?:[.,]\d+)? 
    | 
     \bdeg\b 
    | 
     \b[CF]\b 
    | 
     > 
    ) 

    ## Match words 
    \b[\w]+[\w-]*\b 

</cfsavecontent> 

<cfsavecontent trim variable="Inputs"> 
> 1000 °C (> 1832 °F) 
> -64,6 deg C (Ethylene glycol monobutyl ether acetate) 
-30 to -15 deg C (-22 to 5 deg F) 
-64.5(Ethylene glycol monobutyl ether acetate)- -24.4 deg C(N-Methylpyrrolidone) 
</cfsavecontent> 

<cfloop index="CurIn" array=#Inputs.split('\n')# > 

    <!--- 
     Replace 1/2: Normalise to/- and °/deg as per expected values 
     Replace 3: Remove unwanted words 
     Replace 4: Cleanup leftover parens 
    ---> 
    <cfset Out = CurIn 
     .replaceAll(' to ',' - ') 
     .replaceAll('°(?=[CF]\b)','deg ') 
     .replaceAll(TempsRx,'') 
     .replaceAll('\(\s*\)',' ') 
     /> 

    <cfdump var=#[CurIn,Out]# /> 

</cfloop> 
+0

耶的工作。是的,第一個會返回兩個結果,因爲這些分組是單獨的溫度或溫度範圍。 但我可以用這個工作!神聖的廢話我討厭正則表達式! – 2012-08-14 18:27:01

0

看起來你只是想刪除任何東西那是在括號內。

只是刪除匹配\(.*?\)

不,這不會對嵌套括號工作什麼。如果這不是一個問題,不是這種方法應該可以正常工作:)