我有這個字符串正則表達式查找並與特定的模式中刪除字符
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個字符,但它不匹配整個文本。
我有這個字符串正則表達式查找並與特定的模式中刪除字符
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個字符,但它不匹配整個文本。
您需要刪除^
(字符串錨開始),並與第1組的使用$1
反向引用的內容替換匹配:
var str = "This is [email protected] #1 but page is @001#";
var result = Regex.Replace(str, @"@([0-9]{1,3})#\z", "$1");
的@([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");
如果模式可能出現在文本中的任何地方,請刪除'\ z'。 –
是的,我在[我對該問題的評論]中提到過(http://stackoverflow.com/questions/41828517/regex -to-find-and-remove-char-with-specific-pattern/41828677#comment70843780_41828517),但它的想法似乎是匹配字符串末尾的文本。 –
對於我的情況,最終的解決方案是'@([ 0-9A-Za-z] {1,3})#'。謝謝! – maurox
嘗試'@([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等)'是輸入的一部分嗎? –
它有點不清楚。 「(001是可變的,前01a或021等)」字符串的一部分還是隻是對字符串的評論?你已經引用它,就好像它是字符串的一部分,但是你說的只是匹配字符串的@ 001#部分,而實際上是從你想要的結果中刪除它。 – Chris
'^'表示匹配必須在字符串的開始,結尾處的\ z。簡單地刪除它們,它應該沒問題。 ('@([0-9] {1,3})#') –