如何在Regex.Replace方法中使用$符号?

时间:2013-10-29 12:05:20

标签: c# asp.net regex

我有一个如下字符串:

string strAttachment = "3469$cosmeticsview@.png,3470SQL.txt";  

我想要这个:

cosmeticsview.png,SQL.txt

我试试这个:

var result = Regex.Replace(strAttachment, @"\d+@+$", "");
Response.Write(result);

但不行。

我认为导致这个问题是$符号。

修改

我想要删除数字

3 个答案:

答案 0 :(得分:1)

尝试像\$

一样转义它

它在Regex中保留以指示行的结尾

此外,不需要@+ - 这不是正则表达式的工作方式。要获得所需的结果:

\d+\$

然后使用替换为@

var result = Regex.Replace(strAttachment, @"\d+$", "").Replace("@","");

答案 1 :(得分:1)

这里有两个问题 - 首先是逃避特殊的正则表达式符号(在你的情况下为行尾)。第二个是错误的模式 - 您当前的解决方案尝试在数字之后匹配@

   one or more @ character
       |
       | end of line
       | |
    \d+@+$
     |
one or more digit

这将由hello1234@匹配,当然,这不是你的情况。您想删除带有美元符号或@字符的数字。这是正确的模式:

  one optional $ character
        |
        | OR
        | |
    \d+\$?|@
     |     |
     |   @ character
     |
one or more digit

这是代码:

string strAttachment = "3469$cosmeticsview@.png,3470SQL.txt";  
var result = Regex.Replace(strAttachment, @"\d+\$?|@", "");

或者,如果您只想从字符串中删除任何数字,美元和@:

var result = Regex.Replace(strAttachment, @"[\d\$@]+", "");

答案 2 :(得分:0)

我认为你通过尝试单次传球使你复杂化。首先获取所需字符串的一部分(例如cosmeticsview@.png,3470SQL.txt):

var match = Regex.Match(strAttachment, @"\$(.*)");
if (!match.Success) { return; }

然后删除你不想要的字符。在某处定义这样的列表:

List<char> invalidChars = new List<char> { '@' };

在我的示例中,我只添加了@

现在只需删除这些字符:

var val = string.Join("",
    match.Groups[1].Value
        .Where(c => !invalidChars.Contains(c))
);

这是Regex 101来证明我提供的正则表达式。