C# 将字符串拆分为字符串数组的元素

C# 将字符串拆分为字符串数组的元素,c#,string,arrays,C#,String,Arrays,我有一个字符串,格式为: blockh->127.0.0.1 testlocal.de->127.0.0.1 testlocal2.com 现在我需要分离元素,我认为最好的方法是使用字符串数组。我只需要将这些元素分开: 127.0.0.5.page.de 127.0.0.1另一个RandomPage.com 如何分割和过滤数组以仅获取这些元素 使用.Filter()方法不会影响作业。可以使用stringSplit()方法 var s = "testlocal->testlocal2"; v

我有一个字符串,格式为:

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

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

127.0.0.5.page.de

127.0.0.1另一个RandomPage.com

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


使用.Filter()方法不会影响作业。

可以使用string
Split()
方法

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

您可以使用string
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();
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())
.选择(m=>m.Value)
.ToArray();

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

如果拆分字符串的更简单版本不适合您,那么最好通过定义正则表达式和提取匹配项来实现

这在本MSDN文章中有详细描述:


有关正则表达式外观的更多信息,此页面非常有用:

我在上面编辑过,内容并不总是相同的。它是可变的。@Chris是的,修正了:)也许值得一提的是,你会得到“blockh”作为第一个元素,这可能是你想要的,也可能不是你想要的……没错。更新我的答案;)使用正则表达式的示例会给ma一个包含我首选元素的2个字段的数组吗?更新正则表达式以匹配IP和域。现在它得到了你需要的两个字符串。我不需要得到“blockh”。我想,没有正则表达式,还有什么更简单的方法吗?这不是上述问题的重复。它不仅是关于分割,而且是关于过滤。