2015-03-06 3 views
0

Я немного новичок с Java regex, поэтому мне интересно, может ли кто-нибудь помочь, когда мне нужно регулярное выражение для разделения текста на основе ngrams. Так что, если у меня есть текст, как это:Java regex для сохранения ngrams в квадратных скобках

dyson [salisbury matheson beaumont] clarke [carstairs morden] vaughan

Чтобы вернуть следующие ngrams:

Unigram: dyson Trigram: salisbury matheson beaumont Unigram: clarke Bigram: carstairs morden Unigram: vaughan

Содержимое квадратных скобок сохранившиеся в биграммах или триграммах?

Разделение будет основано на пробелах вне скобок.

+0

, что происходит, если у вас есть что-то вроде «Dyson [Солсбери Матесона Beaumont] кларк Дэвидсона [Карстейрс морден] vaughan "? – user3334690

+0

clarke и davidson - это униграммы. –

+0

, поэтому результат будет примерно таким, как [«dyson», «salisbury matheson beaumont», «clarke», «davidson», «carstairs morden», «vaughan»]? это то, что я думал, но это не очень понятно из вашего вопроса ... Я почти ниспровернулся, прежде чем понял, что вы имели в виду. – user3334690

ответ

1

Это довольно просто:

\w+|\[([\w\s]+)\] 

Demo

Объяснение:

  • \w+ соответствует слову (ряд буквенно-цифровых символов или подчеркивания)
  • или: \[([\w\s]+)\]
    • \[ соответствует [
    • [\w\s]+ соответствует ряд слов и пространств, это улавливается
    • \] соответствует ]

Если у вас есть захват, это означает, у вас есть что-то в скобках , иначе это означает, что у вас есть одно слово. Затем вы можете применить простое \w+ регулярное выражение к содержимому скобок, чтобы извлечь слова.

Чтобы использовать его в Java вы должны избежать обратных косых черт, чтобы передать их как есть в регулярных выражениях:

String pattern = "\\w+|\\[([\\w\\s]+)\\]"; 
+0

Спасибо, но если я попробую 'String delimiters =" \ w + | (?: \ [([\ w \ s] +) \] ";' Я получаю незаконное сообщение escape char. Я хочу использовать эту строку в 'split' следующим образом:' String [] ngrams = ngramsText.split (delimiters); ' –

+0

Вы должны избегайте обратных косых черт при передаче строки в Java: 'String pattern =" \\ w + | (?: \\ [([\\ w \\ s] +) \\] ";' И не используйте ' split_ function, это плохо подходит для этого случая. Используйте вместо этого сопоставление. –

+0

Спасибо. Я попробую это позже. –

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

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