求切字符串的正则表达式

yurenjf 2008-07-11 04:15:25
字符串如下(无换行符)
aaa1xxxx aaa2akjxk lka baljxklj990 bbb19ksjk xxxx bbb1oiooioipoi bbb29i0xl bbb29090x aaa1xxxdxx aaa2akjxk lka baljxklj990 bbb19ksjk xxxx bbb1oiooioipoi bbb29i0xl bbb29090x

规律是:aaa1,aaa2会1:1 的机会出现,aaa1和aaa2后面的字符可能不相同相同,如果出现aaa1,aaa2, 后边就可以跟有bbb1, bbb2,但是bbb1,bbb2出现的次数是{0,m}, bbb1和bbb2后面的字符可能不相同相同, 当然可能还有bbbN. 同时还希望可以分别取得aaa1,aaa2,bbb1等这些特别字符串开头的整个字符串。
这样的正则表达式怎么写啊,大侠请出援手哦
aaa1
aaa2
bbb1
bbb1
bbb2
bbb1
bbb2
bbbN
aaa1
aaa2
bbb1
bbb1
bbb2
bbb2
bbbN
...全文
136 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
HimeTale 2008-07-15
  • 打赏
  • 举报
回复
?mc.Count
6
?mc[0].Value
"aaa11393630 LA UA O aaa21393 FO LAT bbb11393630 bbb213936 bbb3139363000291222008 bbb4139B-TVXV 0001 "
?mc[1].Value
"aaa113936300029122200 EUAM O aaa21H64P14 459 PME-CS bbb3139363000291PPS X bbb41393630002912220 bbb3139363H64P145459 FA.S bbb4139363 bbb31393630 bbb41393630 H64P145 bbb3139363 bbb4139363000 "
?mc[2].Value
"aaa11393 O aaa21393630002 PTW bbb3139363000291222 bbb41393630 bbb31393630002912220HJKSO O bbb4139363 bbb3139363SS bbb41393630002912220080 "
?mc[3].Value
"aaa113936300FSIN. aaa213936PA bbb31393HP bbb4139363 "
?mc[4].Value
"aaa1139363000 ME aaa213936 PMM bbb313 bbb41393630002912220 XD bbb31393630002 IR.FJEDPSS-B bbb413936300 0002 "
?mc[5].Value
"aaa113936300 O aaa2139H6AP145563 bbb3139363000 SE.PV(X/Y) bbb4139363 "

?mc[0].Groups["aaa1"].Value
"aaa11393630 LA UA O "
?mc[1].Groups["aaa1"].Value
"aaa113936300029122200 EUAM O "
?mc[2].Groups["aaa1"].Value
"aaa11393 O "
?mc[3].Groups["aaa1"].Value
"aaa113936300FSIN. "
?mc[4].Groups["aaa1"].Value
"aaa1139363000 ME "
?mc[5].Groups["aaa1"].Value
"aaa113936300 O "
?mc[0].Groups["content"].Value
"bbb11393630 bbb213936 bbb3139363000291222008 bbb4139B-TVXV 0001 "
?mc[1].Groups["content"].Value
"bbb3139363000291PPS X bbb41393630002912220 bbb3139363H64P145459 FA.S bbb4139363 bbb31393630 bbb41393630 H64P145 bbb3139363 bbb4139363000 "
?mc[2].Groups["content"].Value
"bbb3139363000291222 bbb41393630 bbb31393630002912220HJKSO O bbb4139363 bbb3139363SS bbb41393630002912220080 "
?mc[3].Groups["content"].Value
"bbb31393HP bbb4139363 "
?mc[4].Groups["content"].Value
"bbb313 bbb41393630002912220 XD bbb31393630002 IR.FJEDPSS-B bbb413936300 0002 "
?mc[5].Groups["content"].Value
"bbb3139363000 SE.PV(X/Y) bbb4139363 "

没发现那里不正常的
yurenjf 2008-07-15
  • 打赏
  • 举报
回复
aaa11393630 LA UA O aaa21393 FO LAT bbb11393630 bbb213936 bbb3139363000291222008 bbb4139B-TVXV 0001 aaa113936300029122200 EUAM O aaa21H64P14 459 PME-CS bbb3139363000291PPS X bbb41393630002912220 bbb3139363H64P145459 FA.S bbb4139363 bbb31393630 bbb41393630 H64P145 bbb3139363 bbb4139363000 aaa11393 O aaa21393630002 PTW bbb3139363000291222 bbb41393630 bbb31393630002912220HJKSO O bbb4139363 bbb3139363SS bbb41393630002912220080 aaa113936300FSIN. aaa213936PA bbb31393HP bbb4139363 aaa1139363000 ME aaa213936 PMM bbb313 bbb41393630002912220 XD bbb31393630002 IR.FJEDPSS-B bbb413936300 0002 aaa113936300 O aaa2139H6AP145563 bbb3139363000 SE.PV(X/Y) bbb4139363

原串很长,我把内容删了一部分,但Header没变,请帮忙看看,谢谢!!!
HimeTale 2008-07-14
  • 打赏
  • 举报
回复
必须分两步处理:
            MatchCollection mc = Regex.Matches(textBox1.Text, @"(?<aaa1>aaa1.*?)(?<aaa2>aaa2.*?)(?<content>bbb\d.*?((?=aaa1)|$))");
foreach (Match m in mc)
{
//这里可以处理m.Group["aaa1"].Value和m.Group["aaa2"].Value
MatchCollection mc1 = Regex.Matches(m.Groups["content"].Value, @"bbb\d*.*?(?=bbb\d|aaa1|$)");
foreach (Match m1 in mc1)
{
//这里可以处理m1.value,其内容为bbb开头
}

}
HimeTale 2008-07-14
  • 打赏
  • 举报
回复
把你有六对的数据给我看看
yurenjf 2008-07-14
  • 打赏
  • 举报
回复
谢谢大家的回答!我再对问题作些补充说明。
我想要的结果是aaa1到aaa2之前的,aaa2到bbb1之前的。也就是把这些特别Header和它后面的字符全取得,因为每个Header后面的内容还是需要继续解析的,但现在第一层都没解析开,内层的就更别说了。
yurenjf 2008-07-14
  • 打赏
  • 举报
回复
10楼的老大,我发现一个问题,用你给的方法,在切割时会丢失数据,比如我的string里有六对aaa1/aaa2,但分开时会第2,4,6个没取到,第1,3,5取值是正确的,请帮忙看看怎么回事吧
yurenjf 2008-07-14
  • 打赏
  • 举报
回复
谢谢10楼, 你太强了, 赞一个~~~
root_ 2008-07-11
  • 打赏
  • 举报
回复
不是很明白你要的结果,最的给出的就是只想要的结果吗?也就是只要aaaN和对应的bbbN,其余的字符串不管吗?

如果不是那样,具体说一下你要的结果,或给出全部结果
如果是那样,那用什么来接收结果,按顺序给出就可以了吗?
Karual 2008-07-11
  • 打赏
  • 举报
回复
用数组和Split方法去做.
yurenjf 2008-07-11
  • 打赏
  • 举报
回复
3楼的可以匹配,但怎么把每段值取出来呢?
maleangel 2008-07-11
  • 打赏
  • 举报
回复
谁能帮我翻译下,转成中文。
烈火焚身 2008-07-11
  • 打赏
  • 举报
回复
学习的
wocow2316 2008-07-11
  • 打赏
  • 举报
回复
符合这个字符窜的正则表达式
为: string pattern="((aaa1.*aaa2.*)(bbb[1-9][0-9]*.*)*)+";
topming 2008-07-11
  • 打赏
  • 举报
回复
LZ应该换种方式去思考吧!用正则表达式去实现太难了!
grearo 2008-07-11
  • 打赏
  • 举报
回复
取到一个二维数组吗?

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧