2011-01-12 102 views
0

正則表達式用於解析包含'='的文本,並將拆分字符串放入字符串列表中,如鍵值對。但如果值包含'=',它不能使用list.add(key3 +'='+'number = 10');如果值包含'=',則不能使用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' 解析文本並把maleconsumer =約翰成的StringList的鍵,所以在字符串列表中,約翰的記錄是:

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

在這種情況下,我該怎麼做呢?

再次感謝大家的幫助。

+3

你能改說這個問題嗎?你究竟想達到什麼目的?爲前。你想獲得`key3 10`嗎? – posdef 2011-01-12 13:11:48

+0

檢查你的標籤 - 這是一個java/c#/ delphi的問題嗎?聞起來像一個正則表達式問題給我... – serg10 2011-01-12 16:36:48

回答

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; 

BTW工作正常,你可以用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; 
2

檢查值中包含 '=':

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

的Java:

你可以使用:String.contains()方法。

1

對於德爾福;你可以爲你的字符串設置Delimiter和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 2011-01-12 14:26:35

1

德爾福:

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 2011-01-12 14:25:23

1

=如果您使用的Delphi 2009或更高版本,使用TDictionary而不是TStringList中。這樣你可以避免使TStringList正常工作所需的所有手段。

相關問題