2009-04-23 152 views
2

我有以下字符串:如何在C#中提取字符串一个字符串的

姓=约翰&姓= Doe的&市=伦敦& ConfirmationId = WXASL320330

我想从中提取confirmationId。我做了一个分割,并通过&字符,但这返回ConfirmationId = WXASL320330,我只是WXASL320330。这样做的最好方法是什么?

该字符串实际上是PayPal返回的名为RawProcessorResult的属性的一部分。

回答

21

最简单的方法是使用内置的HttpUtility.ParseQueryString()方法:

string queryString = "FirstName=John&LastName=Doe&City=London&ConfirmationId=WXASL320330"; 

string confirmationID = 
    System.Web.HttpUtility.ParseQueryString(queryString)["ConfirmationId"]; 
    // returns "WXASL320330" 
7

使用另一个分裂正则表达式:

新的正则表达式(@ “ConfimationId =(\ w +)”)

3

您可以使用正则表达式到达那里。

或者,您可以将当前结果分割为=,然后取第二个参数。

string temp = "ConfirmationId=WXASL320330"; 
string[] portions = temp.Split("="); 
string answer = portions[1]; 
0

您可以对结果进行拆分并获取确认号码。

1
input.Split('&').Select(x => x.Split('=')).Single(x => x[0].Equals("ConfirmationId"))[1] 
+0

更好的可读性与X [0] .Equals(“ConfirmationId”) – 2009-04-23 17:55:21

+0

笑:)完成! – 2009-04-23 18:22:04

2

我会用一个正则表达式。 例如:ConfirmationId =(\ w {11})

0

你可以做到以下几点:

myString.Split('&')[3].Split('=')[1]; 

但更好的方法很可能是使用正则表达式:

new RegEx("ConfirmationId=?*") 
1

这要看情况。如果这是你的网址在asp.net应用程序的一部分,那么你只是想Request["Confirmationid"]。如果它的东西是别的然后使用正规表示法:

ConfirmationId = {[^ &] *}

1

你必须做这件事的方式主要有三种。

var source = "FirstName=John&LastName=Doe&City=London&ConfirmationId=WXASL320330"; 
var parts = source.Split(new string[] { "&" }, StringSplitOptions.None); 
拆分再次
var ids = parts[3].Split(new string[] { "=" }, StringSplitOptions.None); 
var confirmationId = ids[1]; 
子串用的IndexOf
var confirmationId = parts[3].Substring(parts[3].IndexOf("=")); 
正则表达式
var pattern = new Regex("[^=]+=(?<value>.*)"); 
var match = pattern.Match(parts[3]); 
var confirmationId = match.Groups["value"].Value; 
2

我建议使用正则表达式。

String input = 
    "FirstName=John&LastName=Doe&City=London&ConfirmationId=WXASL320330"; 

String confimationId = 
    new Regex(@"ConfirmationId=(?<Id>[A-Z0-9]+)(&|$)"). 
    Match(input). 
    Group("Id"). 
    Value; 

如果确认ID具有更多结构 - 例如allways 5个字母和6个数字 - 您应该将此信息包含在表达式中。

@"ConfirmationId=(?<Id>[A-Z]{5}[0-9]{6})(&|$)" 

如果精确的结构是未知的或可能改变,只是让一切都交给下一个符号。

@"ConfirmationId=(?<Id>[^&]+)" 
1
string confirmationId = Regex.Match(input, @"(?<=ConfirmationId=)[^&]*").Value; 
+0

这将是我的答案,尽管一些解释可能有助于答案。 – 2009-04-23 17:18:00

0

这是一个URL查询字符串?你在使用网络项目吗?如果是这样,那么就有用于检索值的方法。让我知道,如果这是你在做什么,我会张贴代码。

0

我认为最好的方法是使用该字符串指标做。确保你考虑到,如果由于某种原因,特定的字符串是不是有:

string val = "FirstName=John&LastName=Doe&City=London&ConfirmationId=WXASL320330"; 
string result = string.Empty; 
if (val.LastIndexOf("ConfirmationId=")!= -1) 
{ 
    string val2 = val.Substring(val.LastIndexOf("ConfirmationId=") + 15); 
    result = (val2.IndexOf('&') != -1) ? val2.Substring(0, val2.IndexOf('&')) : val2; 
} 
相关问题