0

次の検索フレーズがあり、抽出する必要があります

  1. ABC XYZ
  2. モバイルアクセサリー
  3. サムスン250

それらが任意の順序で文字列に出現するたびに。アプリケーションは C# .Net です。

Search Phrase
__________________________________________________________
ABC XYZ
ABC XYZ category:"Mobile Accessories"
category:"Mobile Accessories" ABC XYZ
ABC XYZ Model:"Samsung 250"
Model:"Samsung 250" ABC XYZ
ABC XYZ category:"Mobile Accessories" Model:"Samsung 250"
Model:"Samsung 250" category:"Mobile Accessories" ABC XYZ
category:"Mobile Accessories" Model:"Samsung 250" ABC XYZ
__________________________________________________________

前もって感謝します。

例 1 入力 - ABC XYZ カテゴリ:「モバイル アクセサリ」 出力 - ABC XYZ およびモバイル アクセサリ

例 2 入力 - モデル:"Samsung 250" カテゴリ:"モバイル アクセサリ" ABC XYZ 出力 - Samsung 250、モバイル アクセサリ、ABC XYZ

例 3 入力 - ABC XYZ 出力 - ABC XYZ

例 4 入力 - モデル:"Samsung 250" ABC XYZ 出力 - Samsung 250 および ABC XYZ

4

3 に答える 3

1

文字通り明示的な文字列を見つけようとしている場合は、IndexOfメソッドが機能します (例: s.IndexOf("ABC XYZ"))。

ただし、表示する構文は field:"value" 構文のように見えるので、おそらく "([az]+):\"([^"]+)\"" のような正規表現が必要です (フィールドと一致する必要があります)。とペアの値)。

そうでない場合は申し訳ありませんが、質問は少し曖昧です。

于 2009-11-23T12:26:18.807 に答える
1

同じ文字列からいくつかの異なるパターンを抽出したいようです。1 つのアプローチは、各一致を見つけて、作業文字列から削除することです。

例:

String workingstring = "ABC XYZ category:\"Mobile Accessories\"";

Regex categoryMatch("category:\"([^\"]+)\"");
Regex modelMatch("model:\"([^\"]+)\"");

String category = categoryMatch.Match(workingstring);
String model = modelMatch.Match(workingstring);

workingstring = Regex.Replace(workingstring, categoryMatch, "");
workingstring = Regex.Replace(workingstring, modelMatch, "");

String name = workingstring; //I assume that the extra data is the name

これにより、文字列の形式に関係なく、カテゴリ、モデル、および名前が抽出されます。次のような不正な文字列に注意してください。

ABC Model:"Samsung 250" XYZ

戻ります:

ABC  XYZ
于 2009-11-23T12:49:43.143 に答える
1

モデルとカテゴリについては、次のようなものを使用してキャプチャできます。

カテゴリ:"([^"]*)"

これは、あなたのカテゴリが続く文字列を検索します(これはおそらく変更 できcategory:"、その後に別の ".@"category:""([^""]*)"""
Model:"([^"]*)"

残りはわかりませんが、この 2 つを削除すると、空き文字列が残ります。

于 2009-11-23T12:27:04.793 に答える