Регулярное выражение для сопоставления чередующихся последовательностей - PullRequest
3 голосов
/ 12 января 2010

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

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

и иметь возможность извлекать текст между разделителями (например, return abcdefg), где разделитель может быть несколькими несловесными символами, а текст может состоять из нескольких слов. Вот мое регулярное выражение:

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

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

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

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

Ответы [ 4 ]

1 голос
/ 12 января 2010

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

0 голосов
/ 12 января 2010

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

Заменяет последовательность символов слова, за которой следует последовательность символов, не являющихся словами, или конец строки на последовательность слов.

String line = "Am.$#%^ar.$#%^gho.$#%^sh";
line = line.replaceAll("(\\w+)(\\W+|$)", "$1");
System.out.println(line);//prints my name
0 голосов
/ 12 января 2010

Почему бы не ..

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...