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

抱歉,如果我没有很好地描述我正在努力完成的事情!

4

2 回答 2

0

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

只需删除任何匹配的内容\(.*?\)

并不是说这不适用于嵌套括号。如果这不是问题,那么这种方法应该可以正常工作:)

于 2012-08-14T16:35:16.883 回答
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>
于 2012-08-14T17:31:35.213 回答