【问题标题】:How do I remove characters between 2 delimiters? [duplicate]如何删除 2 个分隔符之间的字符? [复制]
【发布时间】:2019-04-06 23:25:26
【问题描述】:

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

字符串是:

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.Replace(input, @"(?<=^.*?)-\d+_", "-")"-""_"包围的第一个数字替换为"-"
  • ...而Regex.Replace(input, @"(?<=^[^-]*)-\d+_", "-") 会将"-""_" 包围的数字替换为"-" 如果它们出现在输入中的第一个 "-"

标签: c# regex string replace


【解决方案1】:

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

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

【讨论】:

  • 这很好用,谢谢 :)
【解决方案2】:

如果输入是非常可预测的,你不需要使用捕获组走那么远

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

您知道要删除数字 + 下划线,同时保留破折号。所以你可以简单地删除整个东西并再次添加破折号。通过将其限制为仅替换一个实例,您将仅替换第一个实例

【讨论】:

    【解决方案3】:

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

    试试这个:

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

    【讨论】:

    • 不,只是第一个破折号和下划线之间的数字
    猜你喜欢
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 2022-11-23
    相关资源
    最近更新 更多