求正则表达式“ abcd1234*5678 ”

bone_love 2012-04-30 03:57:26
求正则表达式“ abcd1234*5678 ”
分别取出
abcd
1234
5678
前2个好写,最后一个? 取乘号之后的数字?
a=" abcd1234*5678 "
b = Regex.Match(a, @"\S[a-z]*").ToString();
c = Regex.Match(a, @"\d+").ToString();
d = ?
...全文
300 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
前方辉煌 2012-05-01
  • 打赏
  • 举报
回复
个人觉得四楼说的很好了...能给你这样的思路和代码就很不错了...你还想别人帮你写完....在说了,你也不是说的多么的清楚..
烈火蜓蜻 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 5 楼 的回复:

4楼的代码没有做规则检查,即要求第一位置必须是字母段,第二必须是数字段,第三位置也是。而且必须有*分隔第二和第三。
我贴出现在的代码:(增加一个功能,输入s="abc123*456" 扩展到s="abc0.1*456" "abc1.0*456"这种位访问模式,也好用。)现在用了字符串查找替换的方法,很笨,希望用正则一次完成。
Single address;
……
[/Quote]

改成你这样,如果一个字符串里出现两个这样的数据,就读不出来喽,如:“ abc123*456 abc123*456 ”
EnForGrass 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

4楼的代码没有做规则检查,即要求第一位置必须是字母段,第二必须是数字段,第三位置也是。而且必须有*分隔第二和第三。
我贴出现在的代码:(增加一个功能,输入s="abc123*456" 扩展到s="abc0.1*456" "abc1.0*456"这种位访问模式,也好用。)现在用了字符串查找替换的方法,很笨,希望用正则一次完成。
Single address;
……
[/Quote]
正则改成这样
^([a-zA-Z]+)(\d+)\*(\d+)$
烈火蜓蜻 2012-05-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

4楼的代码没有做规则检查,即要求第一位置必须是字母段,第二必须是数字段,第三位置也是。而且必须有*分隔第二和第三。
我贴出现在的代码:(增加一个功能,输入s="abc123*456" 扩展到s="abc0.1*456" "abc1.0*456"这种位访问模式,也好用。)现在用了字符串查找替换的方法,很笨,希望用正则一次完成。
Single address;
……
[/Quote]

你用过的代码跑过没? 规则检查? 不符合要求就不会被匹配,符合的就会匹配?还要怎么检查?唉,代码都写到这种程度了,你还用不了,帮不上了。
bone_love 2012-04-30
  • 打赏
  • 举报
回复
4楼的代码没有做规则检查,即要求第一位置必须是字母段,第二必须是数字段,第三位置也是。而且必须有*分隔第二和第三。
我贴出现在的代码:(增加一个功能,输入s="abc123*456" 扩展到s="abc0.1*456" "abc1.0*456"这种位访问模式,也好用。)现在用了字符串查找替换的方法,很笨,希望用正则一次完成。
Single address;
int number;

string type,addr,num,addr1,addr2;
type= Regex.Match(s, @"\S[a-z]*").ToString();
addr = Regex.Match(s, @"\d*").ToString();
addr1 = Regex.Match(s, @"\d\.").ToString();
addr2 = Regex.Match(s, @"\.\d").ToString();
num = Regex.Match(s, @"\*[0-9]+").ToString();

num=num.Replace("*","");

if (addr=="")//如果是位访问模式
{
addr1 = addr1.Replace(".", "");
addr2 = addr2.Replace(".", "");

address = int.Parse(addr1) * 8 + int.Parse(addr2);
address = address / 8;
addr = address.ToString();

}
烈火蜓蜻 2012-04-30
  • 打赏
  • 举报
回复
什么高人,需求不一次性说清楚,真是的

var ms = Regex.Matches(a, @"([a-zA-Z]+)(\d+)\*(\d+)");
foreach(Match m in ms) // 循环处理得到的所有 字母数字*数字的匹配。
{
b=m.Groups[1].Value; // 这里得到全是字母
c=m.Groups[2].Value; // 这里得到是字母后面紧跟着的数字。
d=m.Groups[3].Value; // 这里得到的是*后的数字
}
wqyqwe 2012-04-30
  • 打赏
  • 举报
回复
string t=a.substring(a.lastindex("*"),a.length-a.lastindex("*"));
bone_love 2012-04-30
  • 打赏
  • 举报
回复
我需要对以下序列填表
abcd1234*5678 ,jhg90*12,def34*67
并且要保证是 字母+数字*数字 这个规则。
要检测是否符合规律,如果符合就抽出中间的三个值。

我这样写的,虽然可以跑通程序,不算理想的。
d= Regex.Match(a, @"\*[0-9]+").ToString();
d=d.Replace("*","");

是否还有高人?
烈火蜓蜻 2012-04-30
  • 打赏
  • 举报
回复
var ms = Regex.Matches(a,@"[a-zA-Z]+|\d+");

foreach(Match m in ms)
{
所有匹配项。或全为字母,或全为数字。
}

110,538

社区成员

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

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

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