求一个正则表达式的写法

crossbet 2008-05-28 09:05:16
收到一个串口的字符串,需要进行匹配,格式如下:
"AT^CKPD=para1,para2"

para1:单字符
para2:数值,可能占1到3位,这个参数是可选的,如果没有的话,参数前的逗号也不存在

这个字符串前后可能会有其他一些无意义的字符串,例如:"informationAT^CKPD=para1,para2OK",需要将前后部分忽略,只匹配中间那段。

我匹配字符串的代码如下:
string ATCmdPattern = @"^*AT^KREC=(?<key>\w+)?,(?<time>\d+)";
Regex ATCmdExpression = new Regex(ATCmdPattern, RegexOptions.Compiled);
if (!Regex.IsMatch(RecvMessage, ATCmdPattern)) return;
Match ATCmdMatch = ATCmdExpression.Match(RecvMessage);
if(ATCmdMatch.Groups["time"].Value.Length > 0)
m_time = ATCmdMatch.Groups["key"].Value;
m_key = ATCmdMatch.Groups["key"].Value;

正则表达式写的不对,所以匹配不上,请高手指点,谢谢!
...全文
46 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
crossbet 2008-05-28
  • 打赏
  • 举报
回复
3Q
家鸣 2008-05-28
  • 打赏
  • 举报
回复

string ATCmdPattern = @"AT\^CKPD=(?<key>\w+)(,(?<time>\d+))*";
Regex ATCmdExpression = new Regex(ATCmdPattern, RegexOptions.Compiled);
if (!Regex.IsMatch(RecvMessage, ATCmdPattern)) return;
Match ATCmdMatch = ATCmdExpression.Match(RecvMessage);
if(ATCmdMatch.Groups["time"].Value.Length > 0)
m_time = ATCmdMatch.Groups["key"].Value;
m_key = ATCmdMatch.Groups["key"].Value;

110,536

社区成员

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

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

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