2010-01-14 4 views
1

Есть ли способ, которым Regex проверит первый и последний символы, но заменит только IV, а не пробелы.Нужна помощь в Regex Replace C#

Regex.Replace("This is IV item.", "[^A-Za-z0-9](IV)[^A-Za-z0-9]", "fourth"); 

Пожалуйста, не говорите мне о MatchEvaluator и других основанных Match вещей, мне нужно решение в одну линию, и одна линия не означает, сочетая код, это означает использование только заменить метод.

Кроме того, я не говорю только о пространствах, я говорю вообще для любого характера, как: (

Еще раз позвольте мне ясно, я не ищу ничего, кроме некоторых регулярных выражений символов, которые будут соответствовать символы, но не заменить его, а не этот метод:

Regex.Replace("This is IV item.", "([^A-Za-z0-9])(IV)([^A-Za-z0-9])", "$1fourth$3"); 

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

+0

Если я могу быть настолько вперед, чтобы спросить, почему для этого вам нужен один лайнер? – Rory

+0

Как уже говорилось, Regex Replace находится в другом lib, который я не хочу изменять. для этого вводится Regex. Поэтому вопрос о написании регулярного выражения, а не кода C#. –

ответ

2

Это не совсем ясно из вашего вопроса, что именно вы хотите принимать и отвергать, но я думаю, что нужно что-то вроде этого:

Regex.Replace("This is IV item.", "(?<=[^A-Za-z0-9])(IV)(?=[^A-Za-z0-9])", "fourth"); 
+0

Да, это то, что я хочу. –

2

То, что вы ищете, так называемые выглядят задом и выглядеть aheads. Попробуйте использовать (?<=\)IV(?!<=\) как шаблон.

+0

+1 как и то, что я искал. Извините, не принимая эту причину, я сталкиваюсь с проблемами с указанным синтаксисом, поэтому принимаю тот, который приведен в примере. –

+0

Я думаю, вы имели в виду '(? <= \) IV (? = \)'. Во всяком случае, OP сказал, что окружающие символы могут быть чем-то другим, кроме букв ASCII и цифр, а не просто пробелов. –

5
Regex.Replace("This is IV item.", @"\bIV\b", "fourth"); 
+0

как насчет «Это IV предмет». Я сказал, что это может быть любой символ. –

+0

Это работает для «Это IV предмет». Это не работает для «This is \ _IV \ _ item». –

+0

Метод границы слова (\ b) очень прост и часто все, что вам нужно. Если этого недостаточно, вы должны использовать решения look-behind/look-ahead. –