怎么判断一个字符串是否全部由某些特定的元素组成,并且将字符串分割成这些元素?
比如,我想判断一个字符串是否全部由a或者bc或者def组成,我这样写:
public string[] Split(string str)
{
Regex reg = new Regex(@"^((a)|(bc)|(def))+?$");
MatchCollection mc = reg.Matches(str);
if (mc.Count == 0)
return null;
else
return mc.Cast<Match>().Select(m => m.Value).ToArray();
}
但是,测试结果
string str = "abcadefbc";
Split(str);
返回了整个字符串。
而如果正则表达式中去掉^和$,就可以返回5个对应的元素,但是这样又不能判断“全部”的条件,在str中间插一个其他字符仍能返回5个元素。
请问该怎么解决?
比如,我想判断一个字符串是否全部由a或者bc或者def组成,我这样写:
public string[] Split(string str)
{
Regex reg = new Regex(@"^((a)|(bc)|(def))+?$");
MatchCollection mc = reg.Matches(str);
if (mc.Count == 0)
return null;
else
return mc.Cast<Match>().Select(m => m.Value).ToArray();
}
但是,测试结果
string str = "abcadefbc";
Split(str);
返回了整个字符串。
而如果正则表达式中去掉^和$,就可以返回5个对应的元素,但是这样又不能判断“全部”的条件,在str中间插一个其他字符仍能返回5个元素。
请问该怎么解决?
解决方案 »
- 正则表达式 字符串中的句点如何表示
- 好几个帖子都没人回,再发正则高手请进。
- 在C#中怎么获取当前操作系统中播放器中正在播放的歌曲名????就像MSN中的一样
- 最近想学习一下.net下面的通信编程,希望大家提供点资料
- 请问怎样使程序字体与系统主题保持一致?
- 为何在Console中正常的Messenger Component在ASP.Net 中出错??
- 请教c#中chart控件的问题
- TCP异步通信服务器如何拒绝客户端的连接
- 在C#下编写的程序如何在一台没装Visiual Studio.net的机器上运行?
- 很菜的送分题,在C#中怎么使用RegisterHotKey?
- C# checkbox控件与数据库字段绑定问题
- .net如何挂起进程?
好像不行啊。
我改成这样:
return mc[0].Groups.Cast<Group>().Where(g => g.Index > 0).Select(g => g.Value).ToArray();
但不知道为什么返回bc,a,bc,def。少了一个,而且顺序也不对。
{
Regex reg = new Regex(@"^((a)|(bc)|(def))+?$");
if (reg.IsMatch(str))
{
string pattern = @"(?i)(a)+|(bc)+|(def)+";
return Regex.Matches(str,pattern).Cast<Match>().Select(a=>a.Value).ToArray();
}
else
return null;
}
{
var matches= System.Text.RegularExpressions.Regex.Matches(str, @"((a)|(bc)|(def))+?");
foreach (System.Text.RegularExpressions.Match m in matches)
{
yield return m.Groups[1].Value;
}
}
{
System.Collections.Generic.List<string> source = new List<string>();
foreach (Match m in Regex.Matches(str, @"((a)|(bc)|(def))"))
{
source.Add(m.Value.Trim());
}
if (string.Join("", source.ToArray()).Length != str.Length)
{
return null;
}
else
{
return source.ToArray();
}
}