2009-10-28 156 views
1

我再次撞到墙上。如何在正则表达式中替换转义字符?

如何使用正则表达式替换转义字符? 如果制表符(\ t)发生两次以上,我想用单个\ t代替这两个或更多的发生。 例如,如果\ t \ t \ t出现,那么我只想用\ t替换它。 如何做到这一点?

我在阅读文本文件和应用正则表达式时遇到了更多问题。

我正在使用C#读取文本文件和正则表达式。 当我打开文本文件(文件有txt扩展名)时,我得到了一个正常的文件视图。但是,当我使用 “的TextReader” 读同一个文件,并将其存储到字符串,我得到的文字是这样的:

OK \ t \ t \ t \ t \ t \ tEmail:
KO @ gmail的。 COM \ rPhone:+ 91
992 \ t \ r \ rExperience摘要
\ rBusiness智能和数据
仓库设计师拥有超过600
年的OLAP工作经验
项目\ r \ r \ rTechnology \ rBelow是
重要软件产品列表
个工具,我曾
与\ r \ rSoftware
产品\ r \ A \ r \ aOperating
系统:\ rWINDOWS NT,WINDOWS 2000,
UNIX \ rDatabase管理
系统:\ rOracle 8I ,是Oracle 9i,甲骨文
10g中,SQL-Server 7.0中,DB2 \ rSoftware
套餐:\ RVSS,ER赢,M1 \ rFourth
代语言:\ RPL/SQL,
SQL * PLUS \ rTools &
技术:\ rOracle Warehouse
生成器10.1.0.4.0,ORACLE 9i的AS,
Oracle发现者报告数据阶段
8.0,快速通道8.5,DB @立方的JavaScript,JSP,的jdev,BI豆,ASP,
ASP.NET,抗体
从头算\ r \ r \ A \ r \一符\ v \ r \ r \ fAssignments \ rThe
细节,我已经处理了此处所列的各项任务
的,按时间
为了
。\ r \ r名称\ r \ aAvery Dennison Data
仓储\ r \ a \ r \ a客户\ r \ aAvery
丹尼森,他在这个项目挑战
是从现有
仓库饲料EDW其具有数据在
聚集
水平。\ r \ A \ r \ A \ r \ RNAME \ r \ aAOL BI
(Omniture)\ rite团队。设计,
编码和测试
与现场团队协调。
\ r \ a \ r \ aTools & Technologies \ r \ aUnix
Platform,Oracle 10g,Py。不仅
提供正确的要求,但
也表现必须是在
接受
范围。\ r \ A \ r \ A \ r \ r \ r \ r \ r \ r \ r \ r \ r \ r \ r \ RNAME \ r \ AAIW
活动(ABSA)\ r \ A \ r \ aClient \ r \ aABSA,
南非\ r \ A \ r \ AP

即\ s,\ r,\ f等所有转义字符都是可见的。因此,当我将相同的文本读入字符串变量时,使用普通文本的正则表达式不起作用。

任何人都知道如何解决这个问题?

谢谢

我还有一个查询。我想匹配行末的文本。我试图用$做这个。例如,要匹配以“赋值”结尾的文本,我使用了正则表达式赋值$。它使用普通文本。但是当我运行这个由streamreader给出的文本regx时,这个正则表达式不起作用。流式阅读器给出像Assignments \ r \ r \ f这样的字符串。如何匹配行尾或行尾与这种文本?

+0

是不是因为向大家展示这些细节而侵犯了Karim的隐私?这是公众可访问还是测试/虚假信息? – Gacek 2009-10-28 13:37:24

+0

offtopic:我猜Osama Karim会很高兴看到这里发布的这些信息;-) – 2009-10-28 13:37:40

+0

我想他会很高兴;)但是这并不能解释和证明这一点,除非这是公开信息或他已明确许可做所以:) – Gacek 2009-10-28 13:40:38

回答

1

您正在尝试匹配字符串"\r",对不对?你必须逃离转义字符做到这一点:

"(\\r)*" 

这个表达式将会匹配任何"\r"多次。它的工作原理是"\\"转义为字面"\"。您也可以应用相同的想法来匹配"\t"

+0

谢谢。 我还有一个查询。 我想匹配行尾的文本。 我试图用$做这个。例如,要匹配以“赋值”结尾的文本,我使用了正则表达式赋值$。它使用普通文本。但是当我运行这个由streamreader给出的文本regx时,这个正则表达式不起作用。流式阅读器给出像Assignments \ r \ r \ f这样的字符串。如何匹配行尾或行尾与这种文本? – Shekhar 2009-10-28 13:48:06

+0

@shekhar:你可以为'\ r \ r \ f $'添加一个检查而不是'$',就像这样:'“assignments \\ r \\ r \\ f $”' – Welbog 2009-10-28 13:56:40

2
/\t{2,}/\t/ 

用一个字符替换两个或多个选项卡。

1

您可以用\\t{3}

+1

10你可以用这个\ t {3} – Manu 2009-10-28 13:35:44

+0

@Manu,你是对的,我修改了我的帖子。谢谢你的评论。 – 2009-10-28 14:07:40

1

更换\\t\\t\\t对于标签字符使用这样的事情:

/(\t)*/\1/g 
  1. 结交了一群具有一个char(选项卡字符)和与之相匹配的尽可能。
  2. 用单个字符替换完整匹配
  3. (全局)使用全文的模式。

然后,您可以对您要替换的其他转义字符使用相同的表达式。