能否用正则表达式来生成一个字符串数组?

时间:2023-01-07 08:40:07
如题,我有下面这样的程序:

string[] result= ....
foreach(string s in result){
    Console.Writeline(s);
}

我希望result这个数组包含所有符合情况的:"id"加上一个数字,这个数字是一位或者两位,而且末位不超过4,如下的例子
id1
id2
id3
id4
id11
id12
id13
id14
一直到id94

可以通过RegEx的相关功能做到吗?
谢谢!

9 个解决方案

#1


目测应该可以用LINQ做
非要正则,你需要先定义个LIST,循环匹配,把能匹配上的加入LIST,然后再转成数组

#2


string[] result = Enumerable.Range(1, 14).Select(i => "id" + i).ToArray();

#3


引用 2 楼 Forty2 的回复:
string[] result = Enumerable.Range(1, 14).Select(i => "id" + i).ToArray();

这个的输出是id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11, id12, id13, id14
不是我想要的。

我想要的是id1, id2, id3, id4, id11, id12, id13, id14, id21, id22, id23, id24, id31......id94
这样的的一个数组

怎么写这个表达式呢?

#4


如果你要的仅仅是固定的数组,而不是从结果集中匹配出你数组中包含的部分,双循环就可以搞定了啊
string[] result=new string[40];
for(int i=0;i<9;i++)
{
for(int j=0;j<4;j++)
{
string id="id";
if(i>0)
{
id+=i.tostring();
}
id+=j.tostring();
result[i*4+j]=id;
}
}

#5



string[] result =  Enumerable.Range(0, 10)
    .SelectMany(i => Enumerable.Range(1, 4).Select(j => "id" + (i * 10 + j)))
    .ToArray();

#6


var list=Enumerable.Range(1,40).Select((x,i)=>"id"+((i/4)*10+(i%4)+1));


结果:

5IEnumerable<String> (40 items)  
id1
 
id2
 
id3
 
id4
 
id11
 
id12
 
id13
 
id14
 
id21
 
id22
 
id23
 
id24
 
id31
 
id32
 
id33
 
id34
 
id41
 
id42
 
id43
 
id44
 
id51
 
id52
 
id53
 
id54
 
id61
 
id62
 
id63
 
id64
 
id71
 
id72
 
id73
 
id74
 
id81
 
id82
 
id83
 
id84
 
id91
 
id92
 
id93
 
id94
 

#7


正则是用来作匹配用的,并不是用来生成数据的

#8


如果你是要匹配的话,可以这样写

id[1-9]\d{0,1}

#9


引用 5 楼 Forty2 的回复:

string[] result =  Enumerable.Range(0, 10)
    .SelectMany(i => Enumerable.Range(1, 4).Select(j => "id" + (i * 10 + j)))
    .ToArray();

LINQ牛逼!

#1


目测应该可以用LINQ做
非要正则,你需要先定义个LIST,循环匹配,把能匹配上的加入LIST,然后再转成数组

#2


string[] result = Enumerable.Range(1, 14).Select(i => "id" + i).ToArray();

#3


引用 2 楼 Forty2 的回复:
string[] result = Enumerable.Range(1, 14).Select(i => "id" + i).ToArray();

这个的输出是id1, id2, id3, id4, id5, id6, id7, id8, id9, id10, id11, id12, id13, id14
不是我想要的。

我想要的是id1, id2, id3, id4, id11, id12, id13, id14, id21, id22, id23, id24, id31......id94
这样的的一个数组

怎么写这个表达式呢?

#4


如果你要的仅仅是固定的数组,而不是从结果集中匹配出你数组中包含的部分,双循环就可以搞定了啊
string[] result=new string[40];
for(int i=0;i<9;i++)
{
for(int j=0;j<4;j++)
{
string id="id";
if(i>0)
{
id+=i.tostring();
}
id+=j.tostring();
result[i*4+j]=id;
}
}

#5



string[] result =  Enumerable.Range(0, 10)
    .SelectMany(i => Enumerable.Range(1, 4).Select(j => "id" + (i * 10 + j)))
    .ToArray();

#6


var list=Enumerable.Range(1,40).Select((x,i)=>"id"+((i/4)*10+(i%4)+1));


结果:

5IEnumerable<String> (40 items)  
id1
 
id2
 
id3
 
id4
 
id11
 
id12
 
id13
 
id14
 
id21
 
id22
 
id23
 
id24
 
id31
 
id32
 
id33
 
id34
 
id41
 
id42
 
id43
 
id44
 
id51
 
id52
 
id53
 
id54
 
id61
 
id62
 
id63
 
id64
 
id71
 
id72
 
id73
 
id74
 
id81
 
id82
 
id83
 
id84
 
id91
 
id92
 
id93
 
id94
 

#7


正则是用来作匹配用的,并不是用来生成数据的

#8


如果你是要匹配的话,可以这样写

id[1-9]\d{0,1}

#9


引用 5 楼 Forty2 的回复:

string[] result =  Enumerable.Range(0, 10)
    .SelectMany(i => Enumerable.Range(1, 4).Select(j => "id" + (i * 10 + j)))
    .ToArray();

LINQ牛逼!