【问题标题】:Split string into elements of a string array [duplicate]将字符串拆分为字符串数组的元素[重复]
【发布时间】:2015-01-23 11:01:29
【问题描述】:

我有一个格式如下的字符串:

blockh->127.0.0.1 testlocal.de->127.0.0.1 testlocal2.com

现在我需要分离元素,我认为最好的方法是字符串数组。我只需要分离这些元素:

127.0.0.5 somerandompage.de

127.0.0.1 anotherrandompage.com

如何拆分和过滤数组以仅获取这些元素?

使用 .Filter() 方法并不适用。

【问题讨论】:

  • 这不是上述问题的重复。不仅是拆分,还有过滤。

标签: c# string arrays


【解决方案1】:

您可以使用字符串Split() 方法来执行此操作。

var s = "testlocal->testlocal2";
var splitted = s.Split(new[] {"->"}, StringSplitOptions.RemoveEmptyEntries); //result splitted[0]=testlocal, splitted[1]=testlocal2

【讨论】:

  • 我在上面编辑过,内容一直不一样。它是可变的。
  • @Chris 是的,已修复 :)
【解决方案2】:

可以使用字符串Split方法:

 var st = "blockh->127.0.0.1 testlocal.de->127.0.0.1 testlocal2.com";
 var result = st.Split(new [] { "->" }, StringSplitOptions.None);

您可以使用正则表达式实现同样的效果:

var result = Regex.Split(st, "->");

作为@Chris 的注释,这两个都将字符串拆分为具有 3 个元素的数组:

  • 127.0.0.1 testlocal.de
  • 127.0.0.1 testlocal2.com

如果您想摆脱 blockh,您可以使用 IP 地址和域正则表达式进行正则表达式匹配:

 var ip = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b\s*(([\w][\w\-\.]*)\.)?([\w][\w\-]+)(\.([\w][\w\.]*))");
 var result = ip.Matches(st).Cast<Match>()
        .Select(m => m.Value)
        .ToArray();

这将只获取包含 IP 地址的两个元素。

【讨论】:

  • 也许值得一提的是,你会得到“blockh”作为第一个元素,这可能是也可能不是需要的......
  • 没错。更新我的答案;)
  • 使用 RegEx 的示例会给 ma 一个包含我偏好元素的 2 个字段的数组吗?
  • 更新了正则表达式以匹配 IP 和域。现在它得到了你需要的两个字符串。
【解决方案3】:

如果用于拆分字符串的简单版本不适合您,您可能会通过定义正则表达式和提取匹配来获得最佳服务。

这在这篇 MSDN 文章中有详细描述:http://msdn.microsoft.com/en-us/library/ms228595.aspx

有关正则表达式外观的更多信息,此页面非常有帮助:http://regexone.com/

【讨论】:

  • 我不需要“blockh”。我认为 RegEx 超载了,没有 RegEx 有更简单的方法吗?
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 2011-12-20
  • 2011-05-31
  • 2012-02-22
相关资源
最近更新 更多