【问题标题】:C# String Splitting - No ending delimiterC# 字符串拆分 - 没有结束分隔符
【发布时间】:2013-01-04 11:58:12
【问题描述】:

昨天回答了我最初的问题,关于如何从字符串中拆分出特定字符,然后删除这两个字符之间的内容。

我谈到从这样的字符串中删除...

lg-109-1.ea-091-2.hd-180-1.hr-220-1

我没有意识到有时我想分割我的角色(在这种情况下,它是 hd 和 . 以及 hr 和 . 之间的所有内容)

但是你看到 hr 没有 . 所以它没有被删除

这是我正在使用的代码...

public static string RemoveB(string s) {
    s = Regex.Replace(s, @"hr.*?\.", "");
    s = Regex.Replace(s, @"hd.*?\.", "");
    return s;
}

有谁知道如何检查 hr 之后是否有 .,如果没有则删除它?

【问题讨论】:

  • 只需使用可选的量词? 来匹配0 或1 .: - @"hr.*?\.?"
  • 我已经为你的问题准备了 3 次,但仍然不知道你想要什么。在hr 之后是否立即执行。你必须更具体
  • s = Regex.Replace(s, @"hr.*?[.|$]", "");

标签: c# regex string split


【解决方案1】:

你可以的

Regex.Replace(s, @"(hr|hd).*?(\.|$)", "");

$ 描述字符串的结尾

【讨论】:

    【解决方案2】:

    尝试使用(\.|$) 而不是仅使用\. 以匹配. 或行尾。或者,如果您知道 hr 始终是最后一个条目,则可以只使用 $ 而不是 \. 来始终匹配行尾。

    【讨论】:

      【解决方案3】:
      public static string RemoveB(string s) {
          s = s.Replace("hr.","$");
          s = s.Replace("hr","");
          s = s.Replace("$","hr.");
          return s;
      }
      

      【讨论】:

      • Ardhian..你写的东西怎么样..?你能解释一下..当我运行你的代码时它会返回这个它返回lg-109-1.ea-091-2.hd-180-1.-220-1我建议你在调试器中运行代码或者在发布显然不起作用的答案之前了解OP想要什么..
      • 这离工作太远了,甚至还没有接近。查看您的第一次和最后一次更换。首先将 hr. 替换为 $*。然后将 *$ 替换回 hr.,从而得到与开始时完全相同的结果。因此,您在这里唯一要做的就是将 hr 替换为空字符串,而这根本不是操作所要求的。因此:-3
      • @Ardhian'koponk'Nugroho 我没有投票给你,但你的解决方案不起作用..op 想要替换 hrhd. 之间的所有内容..即使它是 java ..它也不会工作
      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多