求一正则表达式(c# )

fengling2001 2009-06-23 05:37:43
例如有字符串 string str = "w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7",找出有且仅有两个单元(w+数字作为一个单元,例如:w1,w2)组成的长度大于等于4个单元的字串(必须包括这两个单元),这个例子,

应输出:"w2w3w2w3","w4w5w4w5w4w4w5w4","w4w3w4w3","w6w5w6w5w6"

如果找出有且仅有三个单元长度大于等于6个单元的字串,该如何写正则表达式?
...全文
308 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
fengling2001 2009-06-24
  • 打赏
  • 举报
回复
恩,谢谢
-过客- 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 29 楼 fengling2001 的回复:]
目前没有发现问题,谢谢lxcnn,测试继续进行中,有问题会继续贴上来的,谢谢!
[/Quote]

好的,不过恐怕我只能晚上来回答了
-过客- 2009-06-24
  • 打赏
  • 举报
回复
嗯,24楼的要调下顺序,否则对于"w7w7w7w7w5"这种字符串的结果是错的


string str = "w7w7w7w5w7w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7w7w7w5w7";
MatchCollection mc = Regex.Matches(str, @"(w\d)\1{2,}(w\d)(?:\1|\2)*|(w\d)\3(w\d)(?:\3|\4)+|(w\d)(w\d)(?:\5|\6){2,}");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
fengling2001 2009-06-24
  • 打赏
  • 举报
回复
目前没有发现问题,谢谢lxcnn,测试继续进行中,有问题会继续贴上来的,谢谢!
-过客- 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 fengling2001 的回复:]
对我这个刚学几天正则表达式的人,很有难度啊!
[/Quote]

楼主测试24楼和25楼的正则是否符合要求吧
24楼这种方式应该很好理解吧,只不过是在枚举所有可能罢了
fengling2001 2009-06-24
  • 打赏
  • 举报
回复
太谢谢过客,刚刚回来,接着测试
chenchangxiong 2009-06-24
  • 打赏
  • 举报
回复
好像可以 受教了
qgylovelj 2009-06-24
  • 打赏
  • 举报
回复
up
-过客- 2009-06-24
  • 打赏
  • 举报
回复
如果测试结果没问题的话,这个可以算做是顺序环视和反向引用完美结合的的一经典案例了,呼呼

这个主要是利用了环视零宽度,不占有字符的特性,可惜开始想用逆序环视的,结果不成功
-过客- 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 wackyboy 的回复:]
过客真敬业阿
[/Quote]

哇咔咔,可以放心的去上班了


PS:35楼
昨天写的确通用,不可扩展,试试这个吧
==>
昨天写的不通用,不可扩展,试试这个吧
wackyboy 2009-06-24
  • 打赏
  • 举报
回复
过客真敬业阿
-过客- 2009-06-24
  • 打赏
  • 举报
回复
昨天写的确通用,不可扩展,试试这个吧

//第一个需求,两单元的
string str = "w7w7w7w5w7w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7w7w7w5w7";
MatchCollection mc = Regex.Matches(str, @"(?i)(?=(w\d)\1*(w\d))(?:\1|\2){4,}");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
//输出
w7w7w7w5w7
w2w3w2w3
w4w5w4w5w4w4w5w4
w4w3w4w3
w6w5w6w5w6
w4w7w7w7


//第二个需求,三单元的
string str = "w7w7w7w5w7w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7w7w7w5w7";
MatchCollection mc = Regex.Matches(str, @"(?i)(?=(w\d)\1*(w\d)(?:\1|\2)*(w\d))(?:\1|\2|\3){6,}");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
//输出
w7w7w7w5w7w1
w2w3w2w3w1w3w2
w4w5w4w5w4w4w5w4w2w4
w2w6w5w6w5w6
w4w7w7w7w5w7
wackyboy 2009-06-24
  • 打赏
  • 举报
回复
LZ要求:找出有且仅有两个单元(w+数字作为一个单元,例如:w1,w2)组成的长度大于等于4个单元的字串(必须包括这两个单元)
那么 string str = "w7w7w5w8w8w9"; 结果就是w5w8w8
这个结果是怎么出来的呢? 要求是两个组成的不小于4的 这明显是三个阿 不符合要求阿
如果这样都符合要求的话 那 w7w7w5 及 w8w8w9 为什么不可以呢?
悔说话的哑巴 2009-06-24
  • 打赏
  • 举报
回复
正则,我一直是懂非懂的.
fengling2001 2009-06-23
  • 打赏
  • 举报
回复
对我这个刚学几天正则表达式的人,很有难度啊!
hi_web 2009-06-23
  • 打赏
  • 举报
回复
up!
-过客- 2009-06-23
  • 打赏
  • 举报
回复
或者还用那种条件语句

string str = "w7w7w7w5w7w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7w7w7w5w7";
MatchCollection mc = Regex.Matches(str, @"(?i)(w\d)(?:(?<o>)\1{2,}|(?<p>)\1|(?<q>))(w\d)(?(o)(?:\1|\2)*|(?(p)(?:\1|\2)+|(?:\1|\2){2,}))");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
-过客- 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 fengling2001 的回复:]
string str = "w7w7w5w8w8w9"; 结果就是w5w8w8
[/Quote]

OK,换另一种写法,看看有没有不符合要求的

string str = "w7w7w7w5w7w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7w7w7w5w7";
MatchCollection mc = Regex.Matches(str, @"(w\d)\1(w\d)(?:\1|\2)+|(w\d)\3{2,}(w\d)(?:\3|\4)*|(w\d)(w\d)(?:\5|\6){2,}");
foreach (Match m in mc)
{
richTextBox2.Text += m.Value + "\n";
}
fengling2001 2009-06-23
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 lxcnn 的回复:]
引用 19 楼 chenchangxiong 的回复:
你可以试试
w7w7w5w8w8w9

输出
w5w8w8不满足要求 不要我解释吧 :)


哪里输出了w5w8w8?
[/Quote]

string str = "w7w7w5w8w8w9"; 结果就是w5w8w8
chenchangxiong 2009-06-23
  • 打赏
  • 举报
回复
Match m = Regex.Match(@"w7w7w5w8w8w9w9w1w2w3w2w3w1w3w2w4w5w4w5w4w4w5w4w2w4w3w4w3w2w6w5w6w5w6w4w7",
// @"(w\d)(w\d)(\1|\2){2,}|(?<name3>w\d)\k<name3>(?<name4>w\d)(\k<name3>|\k<name4>){1,}|(?<name5>w\d)\k<name5>{2,3}(?<name6>w\d)(\k<name5>|\k<name6>)*");
//@"(w\d)\1(w\d)(\1|\2){1,}");
@"(?i)(w\d)(?<o>\1*)(w\d)(?(o)(?:\1|\2)+|(?:\1|\2){2,})");
while(m.Success)
{
Console.WriteLine(m.Value);
m = m.NextMatch();
}
加载更多回复(21)

110,500

社区成员

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

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

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