字符串,正则表达式分割数组问题,有图 本帖最后由 zhuzhaodan 于 2012-11-27 20:04:53 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 原字符串: str="22222222a11111111a222222a";表达式:regex expression=new regex(@"a");想要的结果:arraylist arr arr[0] 字符串 "22222222" arr[1] 字符串 "匹配到了a" arr[2] 字符串 "11111111" arr[3] 字符串 "匹配到了a" arr[4] 字符串 "222222" arr[5] 字符串 "匹配到了a" 是啊,正则的Split方法直接可以取到匹配和未匹配的部分,特殊的处理一下就行了。你需要给出个示例。 string s = "22222222a11111111a222222a"; string[] results = Regex.Split(s, @"(a)").Select((x, y) => y % 2 == 1 ? "匹配到了" + x : x).ToArray(); foreach (string result in results) Console.WriteLine(result); select 这是谁的方法,string[] 每查到这个方法阿? linq的扩展方法:这个.net 3.5可以用,如果是.net2.0就不能用。 string s = "22222222a11111111a222222a"; string[] results = Regex.Split(s, @"(a)").Where(x => x.Length > 0).Select((x, y) => y % 2 == 1 ? "匹配到了" + x : x).ToArray();再增加个where,把生成的最后一个空白字符串筛掉。 基本思路是这样的:用正则表达式(a)对源字符串拆分后,得到如下字符串数组:22222222a11111111a222222a(最后还有一个拆分出来的空串)即肯定是:拆分项正则匹配项拆分项正则匹配项拆分项……正则匹配项拆分项根据元素在数组中的下标,匹配项一定是奇数下标,所以重新遍历一下将奇数下标的元素处理一下,就得到最后的结果了。 string s = "22222222a11111111a222222a";string[] results = Regex.Split(s, @"(a)").Select((x, y) => y % 2 == 1 ? "匹配到了" + x : x).Where(x => x.Length > 0).ToArray();这样写就行了。 linq to Array 那个还没看过,我去看看先,不太了解那个写法,然后我试试你的方法,regexExpression就没有别的方法能在存入数组之前对匹配项做修改的办法了吗 那个select后面的x,y那一部分是C#的哪块知识阿朋友,我去查查 Select((x, y) =>它对应一个匿名方法,有2个参数:x表示集合中的当前元素,y表示当前元素在集合中的位置(即下标)=>右边的是这个方法的具体代码,即返回一个处理的结果。Select是投影操作,对源泛型可枚举对象里的元素进行某种处理,将得到新元素组成一个新的泛型可枚举对象。 我试试了一下,发现结尾没有空字符串阿 string[] arr=expression.Split(text); arr=arr.Select((x,y)=>y%2==1?"OK":x).ToArray(); 按照我这个规则应该没有吧,什么情况会出现空?另外,对于select我看MSDN里面写的是一个泛型集合,可是实际上并没有把类型制定为参数呀public static TSource[] ToArray<TSource>( this IEnumerable<TSource> source) string s = "22222222a11111111a222222a"; var ary = Regex.Matches(s, @"a|[^a]+").Cast<Match>().Select(t => t.Value).ToArray(); 手机短信发送条形码 大家帮帮忙,帮我找找分级管理系统的.net源码,谢谢了 高手请进 在C#中怎样截取组合键(ctrl+shift)? 在web上放上datagrid,为什么运行的时候看不到,请高手回答 给SqlParameter变量传null值? C# Winform重画问题 弱弱问题。。。。。。。。。。。。 C#怎么操作excel? 请各位帮帮忙! 这为什么显示不了呢?、、 求:zedgraph画图资料和帮助
表达式:regex expression=new regex(@"a");
想要的结果:arraylist arr
arr[0] 字符串 "22222222"
arr[1] 字符串 "匹配到了a"
arr[2] 字符串 "11111111"
arr[3] 字符串 "匹配到了a"
arr[4] 字符串 "222222"
arr[5] 字符串 "匹配到了a"
string[] results = Regex.Split(s, @"(a)").Select((x, y) => y % 2 == 1 ? "匹配到了" + x : x).ToArray();
foreach (string result in results)
Console.WriteLine(result);
string[] results = Regex.Split(s, @"(a)").Where(x => x.Length > 0).Select((x, y) => y % 2 == 1 ? "匹配到了" + x : x).ToArray();
再增加个where,把生成的最后一个空白字符串筛掉。
用正则表达式(a)对源字符串拆分后,得到如下字符串数组:
22222222
a
11111111
a
222222
a
(最后还有一个拆分出来的空串)即肯定是:
拆分项
正则匹配项
拆分项
正则匹配项
拆分项
……
正则匹配项
拆分项根据元素在数组中的下标,匹配项一定是奇数下标,所以重新遍历一下将奇数下标的元素处理一下,就得到最后的结果了。
string[] results = Regex.Split(s, @"(a)").Select((x, y) => y % 2 == 1 ? "匹配到了" + x : x).Where(x => x.Length > 0).ToArray();
这样写就行了。
=>右边的是这个方法的具体代码,即返回一个处理的结果。Select是投影操作,对源泛型可枚举对象里的元素进行某种处理,将得到新元素组成一个新的泛型可枚举对象。
string[] arr=expression.Split(text);
arr=arr.Select((x,y)=>y%2==1?"OK":x).ToArray();
public static TSource[] ToArray<TSource>(
this IEnumerable<TSource> source
)
var ary = Regex.Matches(s, @"a|[^a]+").Cast<Match>().Select(t => t.Value).ToArray();