2014-11-25 258 views
0

我有與格式的字符串:字符串分割到一個字符串數組的元素

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

回答

0

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

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, "->"); 

由於從@克里斯記這兩個會分裂串入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

0

如果用於分割字符串的較簡單版本不適合您,那麼您可能最好通過定義正則表達式並提取匹配來提供最佳服務。即詳細MSDN文章中描述

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

有關正則表達式怎麼看待這個頁的信息是非常有幫助的:http://regexone.com/

+0

我不需要得到「blockh」。 RegEx超載我想,沒有RegEx的任何更簡單的方法? – razoR 2014-11-25 12:40:25