2017-01-24 2 views
2

У меня есть эта строкаRegex чтобы найти и удалить символ с конкретным шаблоном

This is [email protected] #1 but page is @001# 

(001 является переменным, бывший 01A или 021 и т.д.)

И я хочу, чтобы сделать его

This is [email protected] #1 but page is 001 

С этим ^@([0-9]{1,3})#\z я могу найти строку, которая начинается с «@», и заканчивается символом «#» с макс. 3 символами внутри, но он не совпадает внутри целого текста.

+0

Попробуйте '@ ([0-9] {1,3}) # \ z' и замените на' $ 1'. См. [Demo] (http://regexstorm.net/tester?p=%40%28%5b0-9%5d%7b1%2c3%7d%29%23%5cz&i=This+is+mail%40mail.text+% 231 +, но + PAGE + такое +% 40001% 23 & г =% 241). Если текст, который нужно удалить, находится внутри строки, удалите '\ z' тоже. Является ли '(001 переменным, ex 01a или 021 и т. Д.)' Частью ввода? –

+0

Его немного неясно. Является ли «(001 переменной, ex 01a или 021 и т. Д.)» Частью вашей строки или это просто комментарии к строке? Вы процитировали его так, как если бы он был частью строки, но вы говорите о том, чтобы просто совместить строку @ 001 # с строкой, в то же время удаляя ее из желаемых результатов ... – Chris

+0

'^' означает, что матч должен быть на начало строки, '\ z' в конце. Просто удалите оба, и все должно быть хорошо. ('@ ([0-9] {1,3}) #') –

ответ

2

Вы должны удалить ^ (начало строки якоря) и заменить матч с содержанием 1-й группы с использованием $1 обратной ссылки:

var str = "This is [email protected] #1 but page is @001#"; 
var result = Regex.Replace(str, @"@([0-9]{1,3})#\z", "$1"); 

См regex demo

@([0-9]{1,3})#\z модель найдет @ , От 1 до 3 цифр (помещается внутри группы), а затем # на очень конец строки (\z).

Другой вариант: если значение может начинаться с цифры и может сопровождаться с буквы ASCII или цифры, используйте

var result = Regex.Replace(str, @"@([0-9][0-9a-zA-Z]{0,2})#\z", "$1"); 

И если значение может только буквенно-цифровые символы, просто используйте

var result = Regex.Replace(str, @"@([0-9a-zA-Z]{1,3})#\z", "$1"); 
+0

Если шаблон может встречаться в любом месте текста, удалите '\ z' тоже. –

+0

Да, я упомянул об этом в [моем комментарии к вопросу] (http://stackoverflow.com/questions/41828517/regex -to-find-and-remove-char-with-specific-pattern/41828677 # comment70843780_41828517), но кажется, что идея состоит в том, чтобы сопоставить текст в конце строки. –

+0

Для моего окончательного решения для случая это '@ ([ 0-9A-Za-z] {1,3}) # 'Спасибо! – maurox

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