2017-01-24 34 views
2

我有這個字符串正則表達式查找並與特定的模式中刪除字符

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 + +但是頁面是+%40001 23%&R =%241)。如果您需要刪除的文本位於字符串內,請刪除'\ z'。 '(001是可變的,例如01a或021等)'是輸入的一部分嗎? –

+0

它有點不清楚。 「(001是可變的,前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

相關問題