2014-09-09 2 views
1

Предположим, что у меня есть текст типа «Hello @ c1, пожалуйста, перейдите сюда и играйте с @ c12, @ c1 идет и играет», я хотел бы написать шаблон для замены всех @ c1 с некоторым значением, но в то же время регулярное выражение не должно меняться @ c12 или @ c123 и т. д. он должен заменить только согласованную строку. Я пытался в течение нескольких часов, но не в состоянии произвести правильный выход, так что может кто-нибудь может мне помочь, что делать по поводу его статей или образцы кодаЗамена строки с помощью регулярного выражения

Я использую .Net Framework для написания Регулярного выражения

+0

Показать код. – tnw

+0

Как насчет '@ c1a'? Должен ли он быть изменен или нет? – Toto

ответ

5

Вы можете использовать это регулярное выражение:

@c1\b 

Working demo

enter image description here

Идея заключается в том, чтобы использовать границу слова после вашего текста, и это решит наша проблема

+0

Спасибо, он работает хорошо. –

+0

@Ahmad_Hamdan рада помочь, спасибо за галочку. –

0

Вы можете использовать предпросмотр и назад ',

(?<=\W|^)@c1(?=\W|$) 

Код:

string str = "Hello @c1, please go here and play with @c12, @c1 goes and plays"; 
string result = Regex.Replace(str, @"(?<=\W|^)@c1(?=\W|$)", "foo"); 
Console.WriteLine(result); 
Console.ReadLine(); 

IDEONE

1
@c1(?![a-zA-Z0-9]) 

вы можете сделать это с помощью отрицательного предпросмотра

2

Здесь вы можете использовать границу слова \b или Negative Lookahead.

Слово граница утверждает, что с одной стороны есть символ слова, а с другой стороны нет.

String s = "Hello @c1, please go play with @c12 and @c123"; 
String r = Regex.Replace(s, @"@c1\b", "foo"); 
Console.WriteLine(r); //=> "Hello foo, please go play with @c12 and @c123" 

Отрицательный Lookahead утверждает, что в этой позиции в строке, то, что непосредственно следует не цифра.

String s = "Hello @c1, please go play with @c12 and @c123"; 
String r = Regex.Replace(s, @"@c1(?!\d)", "foo"); 
Console.WriteLine(r); //=> "Hello foo, please go play with @c12 and @c123"