正则表达式从字符串中提取温度和温度范围

时间:2012-08-14 16:32:49

标签: regex coldfusion

好的,我有这个字符串:

-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

很抱歉,如果我没有描述我想要取得的成就!

2 个答案:

答案 0 :(得分:0)

看起来你只想删除括号内的任何内容。

删除符合\(.*?\)

的所有内容

这不适用于嵌套括号。如果这不是问题,那么这种方法应该可行:)

答案 1 :(得分:0)

这似乎可以做你想要的,虽然到目前为止它没有拆分/去除parens中的温度,因为不清楚为什么示例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>