2015-02-08 4 views
0

У меня есть список слов, которые мне нужно заменить концами.Замена конца слова регулярным выражением

Regex reg = new Regex("(.+)ings"); 
word = reg.Replace(word,"thly"); 

Я хочу тогда abcdeings =>abcdethly

, но я только получаю thly

+1

Это потому, что вы заменяете все в строке, соответствующей регулярному выражению. Почему бы не использовать метод usula 'string.Replace'? –

+0

Мне нужен только конец, а не начало или середину, где может появиться строка. –

+0

Затем вам нужно иметь дело с группами регулярных выражений. Просмотрите эту статью, возможно, поможет: https://msdn.microsoft.com/en-us/library/ewy2t5e0(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet -5 –

ответ

3

Используйте $ вариант в конце строки, это означает конец строки, или в качестве альтернативы, \b вариант, который обозначает границу слова

word = Regex.Replace(word, "ings$", "thly"); 
+0

@LucasTrzesniewski Потому что я тестировал его, и он не работает. 'word = Regex.Replace (слово," ings \ b "," thly ");' все еще возвращает 'abcdeings' – Cyral

+1

@Cyral - измените \ на \\ или добавьте @ перед строкой, как в моем ответе. –

+1

@AmirPopovich Добавление @ исправлено: – Cyral

2

Вы можете использовать \b разделителем:

string word = Regex.Replace("abcdeings",@"ings\b","thly"); 

Read here.

0

Следующая регулярное выражение шаблон maches позиции после префикса

(?<=prefix)find\b 

В нашем случае мы используем \w+ в качестве префикса, который обозначает один или несколько слов символов

(?<=\w+)ings\b 

Это работает, потому что префикс не является частью выделенного текста.

+0

Вместо этого вы можете использовать '\ B' (а не границу слова). т.е. '\ Bings \ b' –

+0

Это не работает в моей системе, но делает это с' (? <=. +) ings' – Cyral

+0

@ Идея LucasTrzesniewski - это хорошо и просто. '\ Bings \ b' работает для меня (.NET). Не слово, заканчивающееся до «ings» и слово, заканчивающееся после «ings». –

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