Регулярное выражение для соответствия 1 2 3 4,5,6 - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть файл со строками в следующем формате

1 2 3 4,5,6

Первые три, разделенные пробелом, и последние три, разделенные запятыми. В качестве примера я привел 1-6, но значения могут быть буквенно-цифровыми значениями. Может кто-нибудь помочь мне с регулярным выражением, чтобы соответствовать всей строке, чтобы извлечь 6 значений?

В Java я могу использовать это регулярное выражение - line.split ("[,]"), и оно работает, но я использую Hadoop Pig, и мне нужно передать регулярное выражение в метод с именем PigStorage (), который ожидает регулярное выражение соответствовать всей строке.

Вот документ от Свиньи-

"Свинья поддерживает сопоставление регулярных выражений с помощью ключевого слова match. Она использует совпадения java.util.regex, что означает, что ваш шаблон должен соответствовать всей строке (например, если ваша строка" hi fred "и вы хотите найти" fred " "Вы должны указать шаблон". * fred ", а не" fred ")."

Итак, я хочу, чтобы регулярное выражение совпадало со всей строкой и извлекало 6 значений. Любая помощь?

Ответы [ 4 ]

1 голос
/ 14 сентября 2011

Может быть, вам нужно использовать группу захвата здесь:

    Pattern p=Pattern.compile("(\\d)\\s(\\d)\\s(\\d)\\s(\\d),(\\d),(\\d)");
    Matcher m=p.matcher("1 2 3 4,5,6");
    int cnt=m.groupCount();
    for(int i=1;i<=cnt;++i)
    System.out.println(m.group(i));
0 голосов
/ 14 сентября 2011

Попробуйте это:

([^ ]+){4}([^,]+){2}
0 голосов
/ 14 сентября 2011

Как насчет:

\S+ \S+ \S+ \S+,\S+,\S+
0 голосов
/ 14 сентября 2011
(\w+) (\w+) (\w+) (\w+),(\w+),(\w+)

возможно

...