C# 在c中解析以获取调用方ID

C# 在c中解析以获取调用方ID,c#,twilio,C#,Twilio,我有这根绳子 =inbound&CallerState=IN&ToZip=&CallSid=CA35B8F8162EEFFEF07D4FC7C9EADD94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-04-01&CalledZip=&CallSid=CA35B8F8162EEFFEF07D4FC7C9EADD94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-0

我有这根绳子

=inbound&CallerState=IN&ToZip=&CallSid=CA35B8F8162EEFFEF07D4FC7C9EADD94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-04-01&CalledZip=&CallSid=CA35B8F8162EEFFEF07D4FC7C9EADD94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-04-01&CalledChip=&CallSid=&CalledCity=&CallSid=Ring&FromCity=2B1260606&AccountSid=AccountSid=ACC6D06B4CB6B6B6CCBFBFBFF46B61mZip=466&FromState=IN


我想从这个字符串中获取CallSid。实现这一点的最佳方法是什么?

您可以借助非常简单的正则表达式来实现

关于这个话题,有很多很好的文章

正则表达式选项

RegexOptions.IgnoreCase

表示正则表达式不区分大小写

RegexOptions.Compiled

如果要多次使用正则表达式,那么预编译它可能会很有用。这可以稍微提高性能

雷格克斯游乐场


查看游乐场了解其工作原理:

这是一种非正则方法

const string BEGIN_MARKER = "CallSid=";

var str = "=inbound&CallerState=IN&ToZip=&CallSid=CA35b8f8162eeffebf07d4fc7c9aeadd94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-04-01&CalledZip=&CalledCity=&CallStatus=ringing&From=%2B12606&AccountSid=ACc6d06b4cb61ccbfa61bf461957a5a626&CalledCountry=US&CallerCity=AUBURN&Caller=%2B1265506&FromCountry=US&ToCity=&FromCity=AURN&CalledState=IN&FromZip=466&FromState=IN";
var begin = str.IndexOf(BEGIN_MARKER) + BEGIN_MARKER.Length;
var end = str.IndexOf('&', begin);

var sid = str.Substring(begin, end - begin);
使用CallSid=part,我们检索Sid的第一个字符的索引,然后使用该索引检索Sid的结束位置。当使用string.Substringchar值int startIndex时,该方法从startIndex开始搜索


最后,使用这两个值来提取子字符串。

您可以使用System.Web.HttpUtility.ParseQueryString函数,您需要使用System.Web程序集,但不需要Web上下文

    string querystring = "=inbound&CallerState=IN&ToZip=&CallSid=CA35b8f8162eeffebf07d4fc7c9aeadd94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-04-01&CalledZip=&CalledCity=&CallStatus=ringing&From=%2B12606&AccountSid=ACc6d06b4cb61ccbfa61bf461957a5a626&CalledCountry=US&CallerCity=AUBURN&Caller=%2B1265506&FromCountry=US&ToCity=&FromCity=AURN&CalledState=IN&FromZip=466&FromState=IN";
    NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring);
    string callSID = qscoll["CallSid"];



一种简单的方法是拆分&字符上的字符串,然后找到以CallSid=开头的部分,如果存在,则在=字符上拆分它,并在索引1处获取第二项:


使用字符串。拆分两次请编辑您的问题以添加一个?您在示例中的结果正好如此。试试C代码:
    string querystring = "=inbound&CallerState=IN&ToZip=&CallSid=CA35b8f8162eeffebf07d4fc7c9aeadd94&To=%2B123475&CallerZip=406&ToCountry=US&ApiVersion=2010-04-01&CalledZip=&CalledCity=&CallStatus=ringing&From=%2B12606&AccountSid=ACc6d06b4cb61ccbfa61bf461957a5a626&CalledCountry=US&CallerCity=AUBURN&Caller=%2B1265506&FromCountry=US&ToCity=&FromCity=AURN&CalledState=IN&FromZip=466&FromState=IN";
    NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring);
    string callSID = qscoll["CallSid"];


var callSid = input
    .Split('&')
    .FirstOrDefault(x => x.StartsWith("CallSid=",
        StringComparison.OrdinalIgnoreCase))
    ?.Split('=')[1];  // '?.' is used here in case result is null