正则表达式用于解析包含“=”的文本,并将拆分字符串放入字符串列表中,如键值对。
但如果值包含'=',则不能使用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
...
我使用regex reg ='\ b \ S + \ b'解析文本并将maleconsumer = john放入stringlist的键中,以便在stringlist中,john的记录将是:
maleConsumer=john 9 // maleconsumer=john is key, 9 is value
在这种情况下,我该怎么办?
再次感谢大家的帮助。
答案 0 :(得分: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允许= in key
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;
答案 1 :(得分:2)
检查值是否包含'=':
if(value.indexOf('=') != -1){
//error prompt
}
答案 2 :(得分:1)
爪哇:
你可以使用:String.contains()方法。
答案 3 :(得分:1)
对于Delphi;你可以为你的字符串设置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了解详细信息。
答案 4 :(得分: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;
答案 5 :(得分:1)
如果您使用的是Delphi 2009或更高版本,请使用TDictionary而不是TStringList。这样就可以避免让TStringList正常工作所需的所有这些黑客。