2017-01-17 3 views
1

У меня есть следующий вход:Regex шаблон для замены строки

Person 1kg 

Чтобы получить ожидаемый результат:

Person 1kEq 

Я использую следующий шаблон:

string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape("kg")); 
Regex.Replace(inputSentence, Pattern, "kEq"); 

Regex.Replace не заменяет kgkEq.

Если я изменить входной приговор Person 1 kg замена происходит,

Может кто-нибудь помочь мне с шаблоном для этого?

ответ

3

(?<!\S) требует либо начала строки, либо пробела перед поисковым термином kg. Образец (?!\S) требует окончания строки или пробела после поискового запроса. Вот почему замена происходит, если вы отделите номер и блок измерения пробелом, как в Person 1 kg.

Похоже, что в этом случае вы хотите заменить спичку, если она не прилагается к другим буквам. Используйте (?<!\p{L}) назад 'в начале и (?!\p{L}) предпросмотр в конце:

string.Format(@"(?<!\p{{L}}){0}(?!\p{{L}})", Regex.Escape("kg")); 

См regex demo.

+0

Я получаю исключение FormatException, когда я использую этот выше шаблон/оператор C#, не могли бы вы помочь мне? – Sandepku

+1

Извините, я всегда помню, чтобы удвоить фигурные скобки с помощью ограничивающих кванторов, и забыл сделать то же самое с классом категории Unicode. –

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