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

これはあなたが望むことをしているように見えますが、これまでのところ、例1の結果が2つであるのに対し、例3の結果が1つしかない理由が明確でないため、括弧内の温度を分割/削除していません。(一方が範囲で、もう一方が範囲ではないことは関係がありますか?)

これは、不要なビットを削除し、関連情報のみを残すことで機能します。これは、正規表現の負の先読みを使用して行います(?!)現在の位置が先読みと一致する場合、この位置での一致として受け入れられないように指定します。

(また、期待値に変更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 に答える
0

括弧内にあるものをすべて削除したいだけのようです。

一致するものをすべて削除するだけです\(.*?\)

これがネストされた括弧に対して機能しないというわけではありません。それが問題でない場合、このアプローチはうまくいくはずです:)

于 2012-08-14T16:35:16.883 に答える