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

时间:2015-07-08 10:48:31

标签: c# regex

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

这是输入:

  

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

     

     

+ CUSD:2," 00302220100您的主要余额为10K,有效期至2015年10月23日。有关更多余额的详细信息,请将BAL发送至1"

我的预期结果是:

  

00302220100您的主要余额为10K,有效期至2015年10月23日。有关更多余额的详细信息,请将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;
    }

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

4 个答案:

答案 0 :(得分:1)

你可以试试这个正则表达式:

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

Live Demo

答案 1 :(得分:1)

您可以使用

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

在C#中,声明为:

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

(?<=\+CUSD:\s+2,")后视将检查字符串中的正确位置,预期输出将驻留在m.Value

这是demo

答案 2 :(得分:1)

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

您可以使用variable lookbehindSee demo.

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
  }
}

答案 3 :(得分:0)

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

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

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