В Java (Pig) Regex, как я мог сделать следующее? - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть данные, поступающие в текстовый файл, разделенный по каналам. К сожалению, 2 поля могут иметь несколько значений. Чтобы разделить эти кратные числа, отправитель снова использовал каналы, но заключил в них кавычки. Мое регулярное выражение работало в течение нескольких месяцев до определенной редкой ситуации ...

Регулярное выражение в настоящее время:

([^\|]*)\|"?([^"]*)"?\|([^\|]*)\|"?([^"]*)"?

И это сработало для следующей ситуации, которая происходит большую часть времени: а | "part1 | part2" | а | "tool1 | tool2"

Но в этом случае ([^"]*) прыгает вперед и переносит все с пробела в конец кавычек: а || а | "tool1 | tool2"

Так что я понимаю, что должен учитывать, когда рядом идет труба, а не цитата. Просто не уверен, как ............. Постскриптум Для тех PIG-людей, которые могут на это смотреть, я убирал обратную косую черту из каждого escape, чтобы она выглядела больше как Java, но в PIG вам нужно 2, fyi.

1 Ответ

0 голосов
/ 22 декабря 2011

В вашем выражении вы должны указать, что часть между | s может быть либо заключена в кавычки, либо не заключена в кавычки. Вы можете сделать это следующим образом:

(("[^"]*")|((?!")[^|]*))

Теперь вы можете повторить эту часть несколько раз с | с, если вам нужно.

...