C# 如何删除两个分隔符之间的字符?

C# 如何删除两个分隔符之间的字符?,c#,regex,string,replace,C#,Regex,String,Replace,我有一个字符串,需要从中删除第一个连字符和下划线之间的数字 字符串是: string ProjectName1 = "1234-5678_abcd-efgh-(5000)|type"; string ProjectName2 = "0-4378_abcd-efgh-(5000)|type"; 我试过了 Regex x = new Regex("(\\-\\)(.*?)(\\_\\)"); string repl = ""; string removeDigits = x.Replace(Pro

我有一个字符串,需要从中删除第一个连字符和下划线之间的数字

字符串是:

string ProjectName1 = "1234-5678_abcd-efgh-(5000)|type";
string ProjectName2 = "0-4378_abcd-efgh-(5000)|type";
我试过了

Regex x = new Regex("(\\-\\)(.*?)(\\_\\)");
string repl = "";
string removeDigits = x.Replace(ProjectName, "$1" + repl + "$3");
结果应该是

ProjectName1="1234-abcd-efgh-(5000)|type";
ProjectName2="0-abcd-efgh-(5000)|type";
我尝试了上面的代码,但得到了以下错误

Error message: parsing "(\-\)(.*?)(\_\)" - Unrecognized escape sequence \_.
我用正则表达式尝试了不同的方法,但总是会出现类似的错误


感谢您的帮助

下面的正则表达式似乎起到了作用:

Regex x = new Regex("^(\\d+-).*?_(.*)$");
两个样本输入的结果如下所示

x.Replace(ProjectName1, "$1$2"); //1234-abcd-efgh-(5000)|type
x.Replace(ProjectName2, "$1$2"); //0-abcd-efgh-(5000)|type

下面的正则表达式似乎起到了作用:

Regex x = new Regex("^(\\d+-).*?_(.*)$");
两个样本输入的结果如下所示

x.Replace(ProjectName1, "$1$2"); //1234-abcd-efgh-(5000)|type
x.Replace(ProjectName2, "$1$2"); //0-abcd-efgh-(5000)|type

如果输入是可预测的,那么不需要使用capture group

Regex regex = new Regex(@"-\d+_");
string result = regex.Replace(ProjectName1, "-", 1);

您知道要删除数字+下划线,同时保留短划线。因此,您可以简单地删除整个内容,然后再次添加破折号。通过将其限制为仅替换一个实例,您将只替换第一个实例

如果输入非常可预测,则无需使用capture group

Regex regex = new Regex(@"-\d+_");
string result = regex.Replace(ProjectName1, "-", 1);

您知道要删除数字+下划线,同时保留短划线。因此,您可以简单地删除整个内容,然后再次添加破折号。通过将其限制为仅替换一个实例,您将仅替换第一个实例

我不确定是否完全理解您需要的内容-是否需要替换所有数字,后跟下划线

试试这个:

string formatted1 = Regex.Replace(ProjectName1, @"\d+_", string.Empty);

我不确定我是否完全理解您需要的内容-是否需要用下划线替换所有数字

试试这个:

string formatted1 = Regex.Replace(ProjectName1, @"\d+_", string.Empty);

Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace(
Regex.Replace,input,@)这工作得很好,谢谢:)不,只有第一个破折号和下划线之间的数字没有,只有第一个破折号和下划线之间的数字