2017-07-11 23 views
0

私はStatusCode:の値を取得しようとしている次の文字列を持っています。出力は409でなければなりません。次のようにしましたが、動作しませんでした。C#で文字列内の文字列を検索する方法は?

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)) 
+0

単語は常に「StatusCode:」になりますか?コンマは常にその値に従いますか? – maccettura

+0

@maccettura - はい、あなたの前提は正しいです –

+0

また、これはJSONと思われますか?JSONですか? – maccettura

答えて

0
const string statusCodeIdentifier = "StatusCode:"; 
var outputWithoutSpaces = output.Replace(" ", ""); 
var statusCodeIndex = outputWithoutSpaces.IndexOf(statusCodeIdentifier); 
var parsedCode = outputWithoutSpaces.Substring(statusCodeIndex + statusCodeIdentifier.Length, 3); 

ないきれいな、これはステータスコードは、常に3桁の数字であることを前提としています。しかし、あなたの文字列が常にこの形式であると仮定すると、それはうまくいくはずです。

コメントには、出力がJSONであることが記載されています。それはあなたの例の文字列の場合のように見えませんでした。実際にはJSONの場合は、代わりにNewtonsoft.JSONを使用して、オブジェクトを逆シリアル化してそのように処理します。それははるかに管理しやすいだろう。

2

最初にこの文字列を使用しないでください。それはimproperly read HttpResponseMessageです。そこのどこかにHTTPリクエストを発行するいくつかのコードは、そこからあなただけのレスポンスののStatusCodeプロパティにアクセス呼び出すことができます。

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

var statusCode = response.StatusCode; 
0

あなたは、StatusCode:のインデックスを見つけるそのインデックスを使用して、インデックスへのインデックスから部分文字列を見つけることができます,を入力してください(値を取得するには、StatusCode:の長さを使用する必要があります)

0

ここで正規表現が最適なオプションのようです。

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 =全体の一致;したがって「StatusCode:409」)

tbhの場合、「出力」はHttpClientの応答コードのように見えます。 そして、私は、レスポンスが公にアクセス可能なStatusCodeプロパティを持っていると確信しています。

関連する問題