正则TRegExpr中如何提取逗号/分号/空格(可能多个空格)中文逗号/中文分号的子串

Elysium 2010-01-24 07:40:40
rt
...全文
273 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Elysium 2010-01-24
  • 打赏
  • 举报
回复
嗯,把中文字符都替换一遍问题解决
柯本 2010-01-24
  • 打赏
  • 举报
回复
我的程序在D2010下也测试没问题
Elysium 2010-01-24
  • 打赏
  • 举报
回复
d7下的,也是乱码?!

uses RegExpr;
procedure TForm1.Button1Click(Sender: TObject);
var
RegExpr: TRegExpr;
str : string;
str2 : string;
I : Integer;
sl :TStringList;
begin
RegExpr := TRegExpr.Create;

str2 := 'S444+345,L555+454; 557+333; 666K+334 桥两两侧,护栏好美的美女\drrrrr/好啊啊';
try //[^\s*|\s*$]
RegExpr.Expression := '[\s/,/;/,/;/、/\\//]{1,}';
//RegExpr.Expression := '\s+|[/,/,/;/;/、] ';

sl := TStringList.Create;
Regexpr.Split(str2, sl);
for i:=0 to sl.Count-1 do
begin
str := sl.Strings[i];
showmessage(str);
end;

{I := RegExpr.SubExprMatchCount;
if RegExpr.Exec(str2) then
begin
repeat
Regexpr.Split(str2, sl);
str := RegExpr.Match[0];

until not RegExpr.ExecNext;
end; }
finally
FreeAndNil(RegExpr);
end;
end;
柯本 2010-01-24
  • 打赏
  • 举报
回复
由于delphi 6以下对汉字支持有些问题,所以最好先将中文逗号、分号改成英文的,并用unicode方式改,不然由于上下文关系,它会得到莫名结果,程序如下:
uses regexpr;
procedure TForm1.Button1Click(Sender: TObject);
var
s:String;
r:tregexpr;
ap:tstringlist;
begin
s:='这是aaa;一个测试,你好,不错 ;可能拉bbb';
s:=stringreplace(widestring(s),widestring(';'),';',[rfReplaceAll]);
s:=stringreplace(widestring(s),widestring(','),';',[rfReplaceAll]);
r:= tregexpr.Create;
ap:= tstringlist.Create;
r.Expression:='[; ,]+'; //多个分隔符产并成一行,所以用+
r.Split(s,ap);
memo1.lines.AddStrings(ap);
end;
结果为:
这是aaa
一个测试
你好
不错
可能拉bbb

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧