2012-06-12 3 views
4

Может ли кто-нибудь сказать мне, как изменить это регулярное выражение, чтобы разрешить периоды в строке?Regex split для слов, содержащих периоды

string[] parts = Regex.Split(s, @"\b|[^\.#_a-zA-Z0-9()=><!%]");

Если я обеспечиваю строку: "HELLO ABC.123"

Это регулярное выражение возвращающегося {"HELLO", "ABC", ".", "123"}

Я хочу вернуть {"HELLO", "ABC.123"}

Пожалуйста, прости мои noobishness для регулярных выражений шаблонов.

EDIT: Я использую C# 3.5

+0

Различные языки имеют разные функции регулярных выражений (C# имеет 'Regex.Split()'; php имеет 'preg_split()') - на каком языке вы используете? Он выглядит как C#, но должен быть указан, поэтому мы знаем, используете ли вы правильную функцию. – Clowerweb

+0

Пожалуйста, см. Мое редактирование – ChandlerPelhams

+0

Тогда вы должны положить C♯ в набор тегов, чтобы те из нас, кто игнорирует Microsoft, могут его заблокировать. – tchrist

ответ

3

\b матчи с обеих сторон периода ABC.123. Вы можете изменить его, чтобы этого избежать. Например:

(?<![\w.])(?=[\w.])|(?<=[\w.])(?![\w.]) 

Предоставления полного цитируемого выражения:

@"(?<![\w.])(?=[\w.])|(?<=[\w.])(?![\w.])|[^\w.#()=><!%]+" 

Вы можете добавить #()=><!% символов для всех классов персонажей.

+0

Отлично работает! Спасибо за помощь! – ChandlerPelhams

1

Просто удалите \b из \b|[^\.#_a-zA-Z0-9()=><!%] и использования:

string[] parts = Regex.Split(s, @"[^#_a-zA-Z0-9()=><!%]"); 
+0

Это не работает, он по-прежнему разбивает строку на 4 части, а не 2. – ChandlerPelhams

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