解析AT命令响应的正则表达式

本文关键字:正则表达式 响应 命令 AT 解析 | 更新日期: 2023-09-27 18:01:29

我正在尝试从AT命令响应中获得返回消息。

这是输入:

+ CUSD = 1,"* 124 #",15

好吧

+CUSD: 2,"00302220100您的主余额为10K,有效期至2015年10月23日。如需更多余额详情,请发送BAL至1"

我的预期结果是:

00302220100你的主余额是10K,有效期到23/10/2015。如需更多余额详情,请发送BAL至1

下面是我的代码:
    private string ParseMessages_ChkCredit(string input)
    {
        string messages = "";
        Regex r = new Regex("''AT+CUSD: (''d+),'"(.*?)'"", RegexOptions.Singleline);
        Match m = r.Match(input);
        while (m.Success)
        {
            messages = m.Groups[2].Value.ToString();
            break;
        }
        return messages;
    }

正则表达式不匹配。请帮帮我。非常感谢。

解析AT命令响应的正则表达式

(?<=AT'+['s'S]*?CUSD:[^"]*")[^"]*

您可以使用variable lookbehind .参见演示。

string strRegex = @"(?<=AT'+['s'S]*?CUSD:[^""]*"")[^""]*";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"AT+CUSD=1,""*124#"",15" + "'n" + @"OK" + "'n'n" + @"+CUSD: 2,""00302220100 Your main balance is 10K, valid until 23/10/2015. For more balance details, please send BAL to 1""" + "'n";
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}

你可以试试这个regex:

(?<='+CUSD': 2,'")(.+)

现场演示

可以使用

(?<='+CUSD:'s+2,")[^"]+

在c#中声明为:

var rx = new Regex(@"(?<='+CUSD:'s+2,"")[^""]+");

(?<='+CUSD:'s+2,")查找将检查字符串中的正确位置,并且期望的输出将驻留在m.Value中。

这是一个演示

您需要从正则表达式中删除AT

试试'+CUSD: ('d+),"(.*?)"

new Regex("''+CUSD: (''d+),'"(.*?)'"", RegexOptions.Singleline);