如何在C#中的字符串中搜索字符串?

如何在C#中的字符串中搜索字符串?,c#,C#,我有以下字符串,我正在尝试获取StatusCode:值,输出应该是409。我尝试了以下操作,但不起作用,正确的方法是什么 string output = 'QLASR: Bad Response Conflict StatusCode: 409, ReasonPhrase: 'Improper Software Product Build Name already present in the database', Version: 1.1, Content: System.Net.Http.S

我有以下字符串,我正在尝试获取
StatusCode:
值,输出应该是
409
。我尝试了以下操作,但不起作用,正确的方法是什么

string output = 'QLASR: Bad Response Conflict StatusCode: 409, ReasonPhrase: 'Improper Software Product Build Name already present in the database', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Pragma: no-cache Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Cache-Control: no-cache Date: Tue, 11 Jul 2017 22:18:26 GMT Server: Microsoft-IIS/8.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Content-Length: 68 Content-Type: text/plain; charset=utf-8 Expires: -1 }'

output.Any(x => x.Equals(StatusCode))
不是最漂亮的,这假设状态代码总是3位数字。但是假设您的字符串总是这种格式,它应该可以工作

您在评论中提到,输出应该是JSON。不过,在您的示例字符串中,情况并非如此。如果它实际上是JSON,那么我将使用Newtonsoft.JSON来反序列化对象并以这种方式处理它。这会更容易管理

不是最漂亮的,这假设状态代码总是3位数字。但是假设您的字符串总是这种格式,它应该可以工作


您在评论中提到,输出应该是JSON。不过,在您的示例字符串中,情况并非如此。如果它实际上是JSON,那么我将使用Newtonsoft.JSON来反序列化对象并以这种方式处理它。这将更易于管理。

您不应该从这个字符串开始。这是一个很好的例子。某个地方有一些代码发出HTTP请求,从那里您可以调用access响应的StatusCode属性:

httpClient = new HttpClient();
var response = await httpClient.GetAsync("...");

var statusCode = response.StatusCode;

你不应该从这个字符串开始。这是一个很好的例子。某个地方有一些代码发出HTTP请求,从那里您可以调用access响应的StatusCode属性:

httpClient = new HttpClient();
var response = await httpClient.GetAsync("...");

var statusCode = response.StatusCode;

您可以找到
StatusCode:
的索引,使用该索引并找到从该索引到
索引的子字符串,
(必须使用
StatusCode:
的长度才能获得值)

您可以找到
StatusCode:
的索引,使用该索引并找到从该索引到
索引的子字符串(必须使用
StatusCode:
的长度才能获得值)

正则表达式似乎是这里的最佳选择

int statusCode = 0;
string output = 'QLASR: Bad Response Conflict StatusCode: 409, ...'
string pattern = @"StatusCode\:\s?(\d+)";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(output);
if (m.Success)
{
     statusCode = (int)m.Groups[1].Value;
     Debug.WriteLine(statusCode);
}
此正则表达式查找“StatusCode”,后跟冒号、空格(或非空格)和多个数字。 括号允许您对事物进行分组

因此,当执行此正则表达式时,它将匹配您的输出并找到“StatusCode:409”。然后,我们使用包含括号中的值的组1来获取所需的状态代码。(组0=整个匹配;因此为“状态代码:409”)

但是tbh,您的“输出”看起来像来自HttpClient的响应代码。
我确信响应有一个可公开访问的StatusCode属性。

正则表达式似乎是最好的选择

int statusCode = 0;
string output = 'QLASR: Bad Response Conflict StatusCode: 409, ...'
string pattern = @"StatusCode\:\s?(\d+)";
Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
Match m = r.Match(output);
if (m.Success)
{
     statusCode = (int)m.Groups[1].Value;
     Debug.WriteLine(statusCode);
}
此正则表达式查找“StatusCode”,后跟冒号、空格(或非空格)和多个数字。 括号允许您对事物进行分组

因此,当执行此正则表达式时,它将匹配您的输出并找到“StatusCode:409”。然后,我们使用包含括号中的值的组1来获取所需的状态代码。(组0=整个匹配;因此为“状态代码:409”)

但是tbh,您的“输出”看起来像来自HttpClient的响应代码。
我确信响应有一个可公开访问的StatusCode属性。

这个词是否总是
StatusCode:
,值后面是否总是有一个逗号?@maccettura-是的,你的假设是正确的,这看起来像格式不正确的JSON,它应该是JSON吗?如果它是JSON,然后反序列化到一个对象并获取其中的值。根据对文本形状的假设,可以实现不同程度的健壮性。如果您的输入不是某种标准的可解析格式,并且编写一个合适的解析器需要花费大量的工作,那么直接的方法通常是使用正则表达式。单词是否总是
StatusCode:
,并且值后面是否总是跟一个逗号?@maccettura-是的,您的假设也是正确的,这看起来像是格式不良的JSON,它应该是JSON吗?如果它是JSON,那么只需反序列化到一个对象并获取其中的值。根据对文本形状的假设,可以实现不同程度的健壮性。如果您的输入还不是某种标准的可解析格式,并且编写一个合适的解析器需要做很多工作,那么转到方法通常是使用正则表达式。