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

3
我正在尝试从AT命令响应中获取返回消息。
这是输入内容:
AT+CUSD=1,"*124#",15 OK +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;
    }

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

你好,以下是翻译内容:你可能忘记在响应中添加尾随的 " - phuzi
4个回答

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

你可以使用变量回溯查看演示。
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
  }
}

1
你可以尝试这个正则表达式:
(?<=\+CUSD\: 2,\")(.+)

实时演示


1

您可以使用

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

在C#中声明如下:

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

(?<=\+CUSD:\s+2,") 的后置断言会检查字符串中的正确位置,期望输出将在 m.Value 中。

这里有一个 演示


0
你需要从正则表达式中移除AT
尝试使用 \+CUSD: (\d+),"(.*?)"
new Regex("\\+CUSD: (\\d+),\"(.*?)\"", RegexOptions.Singleline);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接