正则表达式的转义问题(100分)

  • 主题发起人 主题发起人 cmd9x
  • 开始时间 开始时间
C

cmd9x

Unregistered / Unconfirmed
GUEST, unregistred user!
现在涉及到字符分割问题,想采用正则表达式来处理,将一个字符串分割成多个记录,记录定义为:TRec = record
RecType:Char;
SplitChr:Char;
Content:string;
end;
规定了以冒号(":")为分隔符,以分号(";")为结束符,在Content里包含以上两种符号时加上斜杠("/")作为转义符号,现有如下示例:
Str := '1:99;2:abcd;3:Say/:Hello;4:分号"/;"';
需要用正则式解析出以下结果:
1 99
2 abcd
3 Say:Hello
4 分号";"
这个正则式不会写啊,只知道匹配前两个字段时用[/d]:或者[0-9]:,关于最后那个分号也简单,用个?;就行了,中间的Content字段如果里面没有自定义的转义符也好办,用个[/w*]就成了,现在被卡在这里了.
那位仁兄对此有经验,还望帮帮忙,先谢一个了.
 
别那样取
1、用替换字符串把;替换成#13#10,
2、用个TStringList就可以取到各字符串
3、用for循环判断TStringList中的每个string[index]
判断string[index]中的字符从1到length(string[index])是否 in ['0'..'9','a'..'z'...]不是就delete
简单吧?
 
为什么要转成#13#10呢。delphi6以后Delimiter和DelimitedText配合用不好吗
 
很不幸的是,我这个字符串里可能包含任何字符,例如:
Str := '3:Say/:Hello!'#13#10'World!'
另外,我主要目的是想知道能不能用正则式描述拆分方法
 
procedure TForm1.btn1Click(Sender: TObject);
var sReplace,myStr,tempStr:string;
i:Integer;
slReplace:TStringList;
isTrans:Boolean;
begin
myStr:='1:99;2:abcd;3:Say/:Hello;4:分号"/;"';
tempStr:='';
isTrans:=False;
slReplace:=TStringList.Create;
for i:=1 to Length(MYSTR) do begin
if (myStr=':') then begin
if isTrans then begin
tempStr:=tempStr+ myStr;
isTrans:=False;
end
else
tempStr:=tempStr+' ';
end else
if myStr=';' then begin
if isTrans then begin
tempStr:=tempStr+myStr;
isTrans:=False;
end else begin
slReplace.Add(tempStr);
tempStr:='';
end;
end else
if myStr='/' then begin
if isTrans=False then isTrans := True
else begin
tempStr:=tempStr+myStr;
isTrans:=False;
end;
end else
begin
if isTrans then begin
isTrans:=False;
end;
tempStr:=tempStr+myStr;
if i=Length(MYSTR) then begin
slReplace.Add(tempStr);
tempStr:='';
end;
end;
end;
for i:=0 to slReplace.Count-1 do begin
mmo1.Lines.Add(slReplace.Strings);
end;
end;
 
接受答案了.
 
后退
顶部