2016-09-06 3 views
1

У меня есть строка, как «Привет Я из„Казань, Россия“. Вывод должен бытьРазбивает строку в dataweave

Hi 
I 
am 
from 
Kazan, Russia 

Я попробовал регулярное выражение [^\s\"']+|\"([^\"]*)\"|'([^']*)', который прекрасно работает на regexp.com. Но в dataweave это ничего не делает. Это то, что я пытался

%dw 1.0 
%output application/json 
%function split(data) {returnData: data splitBy "[^\s\"']+|\"([^\"]*)\"|'([^']*)'"} 
--- 
split(payload)[0] 

Edit 1

I пытался сканирование оператора
Это то, что я сделал

%dw 1.0 
%output application/json 
--- 
{ 
payload: payload scan /[^\s\"']+|\"([^\"]*)\"|'([^']*)'/ 
} 

Но я получаю NullPointerException
Стек трассировки

Message    : null (java.lang.NullPointerException). 
Payload    :  [email protected] 
Element    : /logFlow/processors/0 @ log:log.xml:14 (Transform Message) 
Element XML   : <dw:transform-message doc:name="Transform Message" metadata:id="87d4353c-240d-4b1c-84b4-171f6c11045b"> 
        <dw:input-payload mimeType="plain/text"></dw:input-payload> 
        <dw:set-payload>%dw 1.0%output application/json---{payload: payload scan /[^\s\"']+|\"([^\"]*)\"|'([^']*)'/}</dw:set-payload> 
        </dw:transform-message> 

ответ

1

Я не уверен в синтаксисе, который вы использовали в своем первоначальном запросе, но следующее должно работать для полезных данных со следующими форматами:

Hello I am from "Kazan, Russia" 

и:

Hello I am from "Kazan, Russia 

В приведенной ниже примере используется:

  1. Possessive Quantifiers, которые соответствуют на требуемых символов слова.

  2. Явное совпадение на ,, чтобы помочь вам найти подходящее место.

  3. Reduce Выход из массива.

DataWeave:

%dw 1.0 
%input payload application/json 
%output application/json 
%var data = "Hello I am from \"StackOverflow, Internet\"" 
--- 
data scan /\w++, \w++|\w++/ reduce ($$ ++ $) 
+0

Можете ли вы объяснить регулярок часть, что такое '\ W ++ \ ш ++ | ж ++' делает? Я знаю, что '\ w' будет соответствовать символу, отличному от слова, но не получить остальных. – Abhay

1

Ссылаясь DataWeave документации, регулярные выражения определяются между / , Поэтому заменить двойные кавычки " с / Так оно и должно быть, как это:. /[^\s\"']+|\"([^\"]*)\"|'([^']*)'/

Другое дело, splitBy разбивает строку на массив отдельных элементов Таким образом, вы не получите ожидаемого. В действительности, полезная нагрузка будет разделена на 5 элементов, но ее содержимое пуст. Например: "a,b,c" splitBy "," возвращает 3 элемента: «a» - «b» - «c», запятая/разделитель не является частью результата.

Чтобы получить ожидаемый результат, попробуйте использовать scan. Он возвращает массив со всеми совпадениями в данная строка. Возможно, вам следует соответствующим образом изменить регулярное выражение.

0

Используйте это выражение

% с.в. 1,0 % выход приложения/JSON % вар splittedValue = 'Привет Я из Казани, России' // splitBy ""


splittedValue splitBy ""

 Смежные вопросы

  • Нет связанных вопросов^_^