高分求一正则

cecilia2006 2011-09-05 02:17:19
高分求1正则  
在一串字符串中取最后一次出现  XXX-XXXXXXXXXX格式的字符串,X为数字 并且在这个字符之后20个字符内无 "VOID" 字符串 

谢谢大家 帮帮忙啦
...全文
130 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
QWER_ASDFASDF 2011-09-05
  • 打赏
  • 举报
回复
路过~~学习
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyazhe 的回复:]

C# code
string result = Regex.Match(yourStr,@"(?s)\d{3}-\d{10}(?=((?!void).){0,20}((?!\d{3}-\d{10}).)*$)").Value;
[/Quote]

+1
Daqing 2011-09-05
  • 打赏
  • 举报
回复
(?is)
这个就是干那个用的,单行模式。满足要求的
遥望那些年 2011-09-05
  • 打赏
  • 举报
回复

string str = @"123-1234567890 098-0987654321 void";

Regex reg = new Regex(@"(?i)(?(?=\d{3}-\d{10}.{0,16}void)|\d{3}-\d{10})");

MatchCollection matches = reg.Matches(str);
for (int i = matches.Count - 1; i >= 0; i--)
{
if (matches[i].Value != "")
{
Console.WriteLine(matches[i].Value);
break;
}
}
兔子-顾问 2011-09-05
  • 打赏
  • 举报
回复
try
string result = Regex.Match(yourStr,@"(?is)\d{3}-\d{10}(?=(((?!void).){20}|((?!void).){0,19}$))",RegexOptions.RightToLeft).Value;
cecilia2006 2011-09-05
  • 打赏
  • 举报
回复
谢谢 兔子党 太感谢了,不好意思啊 再提个小要求,能否加上如下条件
如果不匹配的话再去搜寻倒数第二条。。。依次类推 直到获取呢  麻烦啦 谢谢
遥望那些年 2011-09-05
  • 打赏
  • 举报
回复

string str = @"123-1234567890 098-0987654321 void";

Regex reg = new Regex(@"(?(?=\d{3}-\d{10}.{0,16}void)|\d{3}-\d{10})");

MatchCollection matches = reg.Matches(str);
if (matches.Count == 0 || matches[matches.Count - 1].Value == "")
Console.WriteLine("No Match");
else
Console.WriteLine(matches[matches.Count - 1].Value);
huangwenquan123 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyazhe 的回复:]
疏忽了。
换一下


C# code
string result = Regex.Match(yourStr,@"(?is)\d{3}-\d{10}(?=(((?!void).){20}|((?!void).){0,19}$)((?!\d{3}-\d{10}).)*$)").Value;


再试试
[/Quote] 顾问v5
兔子-顾问 2011-09-05
  • 打赏
  • 举报
回复
疏忽了。
换一下

string result = Regex.Match(yourStr,@"(?is)\d{3}-\d{10}(?=(((?!void).){20}|((?!void).){0,19}$)((?!\d{3}-\d{10}).)*$)").Value;


再试试
cecilia2006 2011-09-05
  • 打赏
  • 举报
回复
貌似在这个字符之后20个字符内无 "VOID" 这个条件没匹配上啊  谢谢啦
cecilia2006 2011-09-05
  • 打赏
  • 举报
回复
不存在大小写 只要求是X是数字  上面两条符合么
cecilia2006 2011-09-05
  • 打赏
  • 举报
回复
嗯 谢谢了  对正则用的少  以后不忙的时候还是要补补
兔子-顾问 2011-09-05
  • 打赏
  • 举报
回复
//void我是小写的,如果你一定要大写,这样
string result = Regex.Match(yourStr,@"(?s)\d{3}-\d{10}(?=((?!VOID).){0,20}((?!\d{3}-\d{10}).)*$)").Value;

//如果你不限制大小写

string result = Regex.Match(yourStr,@"(?is)\d{3}-\d{10}(?=((?!void).){0,20}((?!\d{3}-\d{10}).)*$)").Value;
cecilia2006 2011-09-05
  • 打赏
  • 举报
回复
我瞅瞅  谢谢兔顾问的答复  先验货  立马给分 嘿嘿
兔子-顾问 2011-09-05
  • 打赏
  • 举报
回复
string result = Regex.Match(yourStr,@"(?s)\d{3}-\d{10}(?=((?!void).){0,20}((?!\d{3}-\d{10}).)*$)").Value;
cecilia2006 2011-09-05
  • 打赏
  • 举报
回复
在线 自己顶!

110,561

社区成员

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

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

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