Получить десятичное значение из строки, используя Mule Expression Language и Regex

Эта проблема касается MEL и регулярных выражений Mule. У меня есть следующая полезная нагрузка JSON.

    {
       "balance": "{Amount={BasicAmount=604.45, MinimumAmount=60 445, CurrencyCode=USD}}"
    }

Я могу получить доступ к строке, представленной балансом

    {Amount={BasicAmount=604.45, MinimumAmount=60 445, CurrencyCode=USD}}

Мне нужно получить доступ к числу с плавающей запятой 604.45 в виде строки и применить его в качестве переменной потока. Поэтому я реализовал следующий код в своем приложении mule.

    <set-variable variableName="balanceUnrefined" value="#[json:balance]" doc:name="balanceUnrefined"/>
    <logger message="#[flowVars.balanceUnrefined]" level="INFO" doc:name="Logger"/>
    <set-variable variableName="balanceRefined" value="#[regex('\\d+\\.\\d+'.toString(), flowVars.balanceUnrefined)]" doc:name="balanceRefined"/>
    <logger message="#[flowVars.balanceRefined]" level="INFO" doc:name="Logger"/>

Результат последнего регистратора указывает на ноль. Что я не правильно делаю? Это регулярное выражение?

2 ответа

Решение

После нашего обсуждения:

Использовать scan функция тоже. Возвращает List<String> поэтому вы должны взять первый. Это хорошо работает с вашим регулярным выражением на dw 2.0, так должно быть в de 1.0.

Это мой Мул 4 mule-config.xml:

<ee:set-variable variableName="balance"> <![CDATA[ %dw 2.0 output application/json --- scan(vars.regexpVar, /\d+\.\d+/)[0] ]]> </ee:set-variable> </ee:variables> </ee:transform> <logger doc:id="b458c5f0-5360-40f4-b68c-b5cf1e48da51" doc:name="Logger" doc:timestamp="1518874066833" message="#[vars.balance]"/>

И вот мои результаты журналы:

Мне пришлось использовать трансформер, чтобы использовать функцию сканирования, как рекомендовано @shadowsheep, и отдать ему должное. Это относится к Mule 3.9 и использованию dataweave 1.0

<set-variable variableName="balanceUnrefined" value="#[json:balance]" doc:name="balanceUnrefined"/>
        <set-payload value="#[flowVars.balanceUnrefined]" doc:name="Set Payload"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
 "balance": payload scan /\d+\.\d+/
}
]]></dw:set-payload>
        </dw:transform-message>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>

Другие вопросы по тегам