字符串分割到一个字符串数组的元素

字符串分割到一个字符串数组的元素

问题描述:

我有与格式的字符串:字符串分割到一个字符串数组的元素

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()方法不适用于作业。

+0

这不是提到的问题的副本。这不仅是关于分裂,而且关于过滤。 – 2014-11-25 14:00:13

您可以使用字符串Split()方法来做到这一点。

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

我上面编辑过,内容不一直都是一样的。它是可变的。 – razoR 2014-11-25 12:33:01

+1

@Chris是的,修复它:) – 2014-11-25 12:35:40

您可以使用字符串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, "->"); 

由于从@克里斯记这两个会分裂串入3个元素的数组:

  • blockh
  • 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地址的两个元素。

+0

也许值得一提的是,你会得到“blockh”作为第一个可能或可能不需要的元素... – Chris 2014-11-25 12:34:07

+0

这是正确的。更新我的答案;) – 2014-11-25 12:34:45

+0

使用正则表达式的示例会给出一个包含我的偏好元素的2个字段的数组吗? – razoR 2014-11-25 13:32:31

如果用于分割字符串的较简单版本不适合您,那么您可能最好通过定义正则表达式并提取匹配来提供最佳服务。即详细MSDN文章中描述

http://msdn.microsoft.com/en-us/library/ms228595.aspx

有关正则表达式怎么看待这个页的信息是非常有帮助的:http://regexone.com/

+0

我不需要得到“blockh”。 RegEx超载我想,没有RegEx的任何更简单的方法? – razoR 2014-11-25 12:40:25