正则表达式用于解析包含"="的文本,并将拆分字符串放入类似于键值对的字符串列表中.
但如果value包含'=',则不能使用list.add(key3 +'='+'number = 10');
key1 this's done
key2 that costs 10 dollars
key3 number=10 // invalid data, error prompt.
...
Run Code Online (Sandbox Code Playgroud)
怎么解决?谢谢.
编辑:
谢谢大家的帮助.
如果我必须在密钥中添加包含'='的字符串,我该如何解决?
例如,要解析的文本可能是这样的:
maleConsumer=john 1
maleConsumer=eric 2
femaleConsumer=mary 2
maleConsumer=john 8
...
Run Code Online (Sandbox Code Playgroud)
我使用regex reg ='\ b\S +\b'解析文本并将maleconsumer = john放入stringlist的键中,这样在stringlist中,john的记录将是:
maleConsumer=john 9 // maleconsumer=john is key, 9 is value
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我该怎么办?
再次感谢大家的帮助.
这在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;
Run Code Online (Sandbox Code Playgroud)
这更好,仍然有效
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;
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可以使用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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
923 次 |
| 最近记录: |