我正在尝试从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;
}
正则表达式不匹配。请帮助我。非常感谢。
答案 0 :(得分:1)
答案 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 lookbehind
。See 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);