2012-03-17 50 views
0

我有類型的字符串 「24;#usernamehere,#AWRFR \用戶,#,#,#usernamehere」分割字符兩者之間的字符串在C#

我想要分割的這個字符串第一次登場# and ,即ie我想要一個字符串被提取這是介於這兩個字符之間。

因此,對於上面的字符串我想要的輸出:

usernamehere

我怎麼可以使用Regex功能兩個字符之間分割字符串?

+0

聽起來像是一份工作正則表達式... – 2012-03-17 07:40:05

+0

你試過'String.Split()'方法嗎? - http://msdn.microsoft.com/en-us/library/y7h14879.aspx – 2012-03-17 07:40:12

回答

4

一個簡單的正則表達式可以做的工作:

var pattern = new System.Text.RegularExpressions.Regex("#(?<name>.+?),"); 

測試:

string s = @"24;#usernamehere,#AWRFR\user,#,#,#usernamehere"; 
pattern.Match(s).Groups["name"].Value; //usernamehere 
0

不完全是你自找的,但應該做你想要什麼樣的方式......

string input = @"24;#usernamehere,#AWRFR\user,#,#,#usernamehere"; 
string username = input.Substring(input.LastIndexOf("#") + 1); 

如果你想,你可以得到的第一個#的位置和,

int hashPosition = input.IndexOf("#") + 1; 
int commaPosition = input.IndexOf(","); 

string username = input.Substring(hashPosition, commaPosition - hashPosition)); 
1

您需要找到'#'&','的第一個索引。然後使用substring方法來獲取您所需的修剪字符串。閱讀this關於子方法的更多細節

string s = @"24;#usernamehere,#AWRFR\user,#,#,#usernamehere"; 
string finalString = s.Substring(s.IndexOf('#') + 1, s.IndexOf(',') - s.IndexOf('#') - 1); 
2

使用LINQ:

var x = input.Split('#').Where(e => e.Contains(',')).Select(e => e.Split(',').First()); 

這是一樣的:

using System.Linq; 
var input = @"24;#usernamehere,#AWRFR\user,#,#,#usernamehere"; 

你可以用一個單一的線拆呢

var x = from e in input.Split('#') 
     where e.Contains(',') 
     select e.Split(',').First(); 

在這兩種情況下,結果將是:

x = {"usernamehere", "AWRFR\user", "", ""} 

這正是與#,封閉所有子陣列。 然後如果你想第一個元素只是添加.First()或做:

x.First();