我有一个如下字符串:
string strAttachment = "3469$cosmeticsview@.png,3470SQL.txt";
我想要这个:
cosmeticsview.png,SQL.txt
我试试这个:
var result = Regex.Replace(strAttachment, @"\d+@+$", "");
Response.Write(result);
但不行。
我认为导致这个问题是$符号。
修改
我想要删除数字
答案 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来证明我提供的正则表达式。