2011-01-12 24 views
0

正規表現を使用して、 '='を含むテキストを解析し、分割された文字列をキー値のような文字列リストに入れます。'='を含む文字列をstringlistに追加するには?

値に '='が含まれていると、list.add(key3 + '=' + 'number = 10');を使用できません。

key1 this's done 
key2 that costs 10 dollars 
key3 number=10 // invalid data, error prompt. 
... 

解決方法? ありがとうございます。

編集:

ありがとうございました。

キーに '='を含む文字列を追加する必要がある場合、どうすれば解決できますか?

例えば、解析されるテキストは、このようなことがあります。

maleConsumer=john 1 
maleConsumer=eric 2 
femaleConsumer=mary 2 
maleConsumer=john 8 
... 

私は正規表現REG = '\ B \ S + \ b' が解析テキストを使用してSTRINGLISTのキーにmaleconsumer =ジョンを置くために、文字列リストでは、ジョンのレコードは次のようになります。

maleConsumer=john 9 // maleconsumer=john is key, 9 is value 

この場合、どうすればいいですか?

もう一度お返事ありがとうございます。

+3

あなたはその質問を言い換えることができますか?あなたは正確に何を達成しようとしていますか?例えば、代わりに 'key3 10'を取得したいですか? – posdef

+0

あなたのタグを確認してください - これはjava/c#/ delphiの質問ですか?正規表現の質問のようなにおいが私に... – serg10

答えて

6

これは、Delphi

var 
    sl: TStringList; 
begin 
    sl := TStringList.Create; 
    try 
     sl.Add('key1=this''s done'); 
     sl.Add('key2=that costs 10 dollars'); 
     sl.Add('key3=number=10'); 
     ShowMessage(sl.Values['key3']); // Displays number=10 
    finally 
     sl.Free; 
    end; 
end; 

これが優れていると、まだ

var 
    sl: TStringList; 
begin 
    sl := TStringList.Create; 
    try 
     sl.Values['key1'] := 'this''s done'; 
     sl.Values['key2'] := 'that costs 10 dollars'; 
     sl.Values['key3'] := 'number=10'; 
     ShowMessage(sl.Values['key3']); // Displays number=10 
    finally 
     sl.Free; 
    end; 
end; 

ところで作品で正常に動作します、あなたはTStringList.NameValueSeparator

で区切りを指定することができます

NameValueSeparatorを使用してキーを入力する

var 
    sl: TStringList; 
begin 
    sl := TStringList.Create; 
    try 
     // Select a separater you are sure will never be used 
     sl.NameValueSeparator := '|'; 

     sl.Values['maleConsumer=john'] := '1'; 
     sl.Values['maleConsumer=eric'] := '2'; 
     sl.Values['femaleConsumer=mary'] := '2'; 
     sl.Values['maleConsumer=john'] := '8'; 

     ShowMessage(sl.Values['maleConsumer=john']); // Displays 8 
    finally 
     sl.Free; 
    end; 
end; 
+0

あなたの答えはMikaelありがとうございます。上記のような入力形式を変更すると、どうすれば問題を解決できますか?ありがとうございました。 – Dylan

+0

NameValueSeparaterでサンプルを追加して、キーに=を入れてください –

+1

a |データにも同様に... –

2

値は '=' が含まれているかどうかを確認します。

if(value.indexOf('=') != -1){ 
//error prompt 
} 
1

のJava:あなたが使用することができます

:String.contains()メソッド。

1

デルファイの場合;文字列にデリミタとQuoteCharを設定することができます。 例:詳細は

cars := TStringList.Create; 
    // Now add some cars to our list - using the DelimitedText property 
    // with overriden control variables 
    cars.Delimiter := ' ';  // Each list item will be blank separated 
    cars.QuoteChar := '|';  // And each item will be quoted with |'s 
    cars.DelimitedText := '|Honda Jazz| |Ford Mondeo| |Jaguar "E-type"|'; 

here

+0

SimaWBありがとう、私の上記のエディションを見てください、私は問題を解決することはできますか? – Dylan

1

Delphiは:

var 
    LStringList: TStringList; 
    LStrValue: string; 
begin 
    LStringList := TStringList.Create; 
    try 
    // set the value of a key 
    LStringList.Values['a key'] := 'a value'; 
    // get the value of a key 
    LStrValue := LStringList.Values['a key']; 
    finally 
    FreeAndNil(LStringList); 
    end;// trye 
end; 
+0

Dorinありがとう、私の上の版を見てください、私は再びそれを解決することができます。 – Dylan

1

Delphi 2009以降を使用している場合は、TStringListではなくTDictionaryを使用します。そうすれば、TStringListを適切に動作させるために必要なこれらのハックをすべて避けることができます。

関連する問題