C#字符串分割 - 没有结束限定符

3

昨天我的原始问题已经得到解答,关于如何从字符串中分离出特定字符,然后删除这两个字符之间的内容。

我提到了如何删除以下字符串中的内容...

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 后面是否有“.”,如果没有,则将其删除吗?


1
只需使用可选量词?来匹配0或1个.:- @"hr.*?\.?" - Rohit Jain
5
我已经阅读了您的问题3次,仍然不知道您想要什么。它是在“hr”之后立即执行还是不是?您需要更具体一些。 - Royi Namir
s = Regex.Replace(s, @"hr.*?[.|$]", ""); - RockOnGom
3个回答

2

您可以执行

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

$ 表示字符串的结尾。


1

尝试使用(\.|$)代替只用\.,以匹配.或行尾。或者如果您知道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。我建议你在自己的端上用调试器运行代码或者在发布回答之前先理解问题的本质,避免显然不可行的答案。 - MethodMan
这距离可用还有很长的路要走,甚至都不接近。看看你的第一个和最后一个替换。首先,你用*$替换hr.。然后,你再用$替换回hr.,得到了与开始时完全相同的结果。所以在这里你唯一做的事情就是用空字符串替换hr*,而这根本不是op要求的。因此:-3。 - Øyvind Bråthen
@Ardhian'koponk'Nugroho,我没有给你点踩,但是你的解决方案行不通。OP想要替换hrhd.之间的所有内容。你的解决方案并不能做到这一点。即使它是Java,也不会起作用。 - Anirudha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接