2012-03-17 72 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();