Замена регулярных выражений - PullRequest
2 голосов
/ 21 января 2010

У меня есть следующий рег exp

(-[^\w+])|([\w+]-[\w+])

Я хочу использовать его для замены тире пробелами

test -test             should not be replaced
test - test            should be replaced
test-test              should be replaced

Таким образом, только если test -test тире НЕ следует заменять.

В настоящее время ([\ w +] - [\ w +]) заменяет т вокруг тире.

        var specialCharsExcept = new Regex(@"([\w+]-[\w+])", RegexOptions.IgnoreCase);

        if (string.IsNullOrEmpty(term))
            return "";

        return specialCharsExcept.Replace(term, " ");

Любая помощь? Заранее спасибо

PS: я использую C #.

Обновление

Я пытаюсь использовать ваш reg exp для следующего случая.

some - test "some test"   - everything within the quotes the expression should not be applied

Возможно ли это?

Ответы [ 2 ]

5 голосов
/ 21 января 2010

Попробуйте этот сумасшедший:

-(?!\w(?<=\s-\w))

Это регулярное выражение:

  • Ищет тире, за которым не следует (буква с пробелом в два символа перед ней).
  • Заботится о test- test и -test, которых у вас нет в ваших тестовых случаях.
  • Выбирает только тире, так что вы можете заменить его (это действительно то, что сделало определение таким сложным).

Кстати - вам не нужно RegexOptions.IgnoreCase, потому что ваше регулярное выражение не имеет буквальных частей, вы не пытаетесь захватить /test/ из "Test TEST". Это будет делать:

Regex specialCharsExcept = new Regex(@"-(?!\w(?<=\s-\w))");
return specialCharsExcept.Replace(term, " ");
1 голос
/ 21 января 2010

Хорошо, изменено в соответствии с комментарием.

>>> r = ' +(-) +|(?<=\w)-(?=\w)'
>>> re.sub(r, ' ', 'test - test')
'test test'
>>> re.sub(r, ' ', 'test-test')
'test test'
>>> re.sub(r, ' ', 'test -test')
'test -test'

РЕДАКТИРОВАТЬ Исправлено в соответствии с комментарием. Хитрость заключается в том, чтобы добавить «утверждение предпросмотра» с помощью ?= и просмотр сзади с помощью ?<=, которые не являются частью совпадения, но будут проверены.

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