如何删除两个定界符之间的字符?

时间:2018-11-02 17:26:26

标签: 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(ProjectName, "$1" + repl + "$3");

结果应为

ProjectName1="1234-abcd-efgh-(5000)|type";
ProjectName2="0-abcd-efgh-(5000)|type";

我尝试了上面的代码,但收到以下错误。

Error message: parsing "(\-\)(.*?)(\_\)" - Unrecognized escape sequence \_.

我用正则表达式尝试了不同的方法,但总是收到类似的错误。

任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:2)

以下正则表达式似乎可以解决问题:

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

答案 1 :(得分:2)

如果输入非常可预测,则无需使用捕获组走那么远

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

您知道要删除数字+下划线,同时保持破折号。因此您只需删除整个内容并再次添加破折号即可。通过限制它仅替换一个实例,您将仅替换第一次出现的

答案 2 :(得分:0)

我不确定我是否完全了解您的需求-您是否需要替换所有数字,然后加上下划线?

尝试一下:

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