2010-01-12 9 views
3

Я работаю на Java и испытываю трудности с повторением последовательности. Я хотел бы, чтобы соответствовать что-то вроде:Regex для сопоставления чередующихся последовательностей

a.b.c.d.e.f.g. 

и быть в состоянии извлечь текст между разделителями (например, возврат АБВГДЕЖ), где разделитель может быть несколько символов без слов и текст может быть несколько символов слова. Вот мое регулярное выражение до сих пор:

([\\w]+([\\W]+)(?:[\\w]+\2)*) 

(не работает)

Я намеревался получить разделитель в группе 2 с этим регулярным выражением, а затем использовать replaceAll на 1-й группы для обмена разделитель для пустая строка дает мне только текст. Я получаю разделитель, но не могу получить весь текст.

Спасибо за помощь!

+0

Пожалуйста, укажите, что отличает ту часть, которую вы хотите, чтобы захватить из окружающей среды, и какие символы без слов, которые вы хотите, чтобы действовать в качестве разделителей. – Svante

ответ

0

Заменить (\w+)(\W+|$) на $1. Убедитесь, что глобальный флаг включен.

Он заменяет последовательность словных символов, а затем последовательность символов, отличных от слов, или конец строки с последовательностью слов.

String line = "Am.$#%^ar.$#%^gho.$#%^sh"; 
line = line.replaceAll("(\\w+)(\\W+|$)", "$1"); 
System.out.println(line);//prints my name 
+0

Trying line = line.replaceAll ("([\\ w] +) ([\\ W] +)", "\ 1"); но он производит только строку «g» (последняя буква ввода) –

+0

использовать '$ 1' для замены. '\ 1' для обратных ссылок в пределах регулярного выражения - это была опечатка :( – Amarghosh

+0

см. Обновление для примера кода – Amarghosh

0

Почему бы не использовать String.split?

+0

Проблема заключается в том, что текст будет происходить в более крупном теле, которое не будет иметь обычный шаблон. –

+0

Думаю, вам нужно изменить свой пример, чтобы показать нерегулярность. На данный момент я до сих пор не понимаю, почему '' yourStr .split (/ \ W + /) 'недостаточно. – kennytm

0

Почему нет ..

  • найти все вхождений (\w+), а затем объединить их; или
  • найти все невольные символы (\W+), а затем использовать Matcher.html#replaceAll с пустой строкой?
+0

На входных вводах есть некоторые символы, отличные от слов, которые меня волнуют, поэтому замена всех из них не будет работать так, как я хочу. Мне нужно просто скрыть их, когда они последуют эта конкретная модель. Для последовательности из 4 символов или более (egab) –

1

Заменить (\w+)\W+ на $1

+0

oops ... ur right, этого достаточно. Что я думал о том, чтобы сопоставить последнюю часть с '$' и сделать ее более сложной, чем она должна быть ? +1 :) – Amarghosh

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