如何在正则表达式中替换转义字符?

时间:2009-10-28 13:26:36

标签: c# regex escaping character

我又一次撞到了墙上。

如何使用正则表达式替换转义字符? 如果制表符(\ t)出现两次以上,我想用单个\ t替换那两个或多个出现。 例如,如果\ t \ t \ t \ t来,那么我只想用\ t替换它。 怎么做?

我在阅读文本文件和应用正则表达式时遇到了另外一个问题。

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

  

O K \ t \ t \ t \ t \ t \ t \ _电子邮件:
  k.o@gmail.com \ r电话:+ 91
  992 \ t \ r \ n经验摘要
  \ rBusiness Intelligence和数据
  超过6的仓库设计师   多年的OLAP工作经验   项目。\ r \ r \ r \ r \ r技术\ rBelow是一个   重要软件产品清单
  和我工作过的工具   用。\ r \ rSoftware
  产品\ r \ A \ r \ aOperating
  系统:\ rWINDOWS NT,WINDOWS 2000,
  UNIX \ rDatabase管理
  系统:\ rOracle 8i,Oracle 9i,Oracle
  10g,SQL-Server 7.0,DB2 \ rSoftware
  套餐:\ rVSS,ER Win,M1 \ rFourth
  生成语言:\ rPL / SQL,
  SQL * PLUS \ rTools&
  技术:\ rOracle仓库
  Builder 10.1.0.4.0,ORACLE 9i AS,
  ORACLE Discoverer报告数据阶段
  8.0,Fast Track 8.5,DB @ Cube,JavaScript,JSP,JDEV,BI BEANS,ASP,
  ASP.NET,Ab
  从头\ r \ r \ A \ r \一符\ v \ r \ r \ fAssignments \ rThe
  各种作业的细节
  这里列出了我处理的内容,
  按时间顺序   订单。\ r \ n \ r \ n \ r \ a \每一个Dennison数据
  仓储\ r \ A \ r \ aClient \ r \ aAvery
  丹尼森,他在项目中挑战   是从现有的饲料EDW   在中国有数据的仓库   聚集
  等级。\ r \ a \ r \ a \ r \ n \ r \ n \ r \ n \ r \ n \ r \ a \ aAOL BI   (Omniture)\ rite团队。设计,
  编码和测试以及   与现场团队协调   \ r \ a \ r \ aTools&技术\ r \ aUnix
  平台,Oracle 10g,Py。不仅是   提供正确的要求但是   表现也必须在   接受
  范围。\ r \一个\ r \一个\ 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 \ n \ r \ f这样的字符串。如何将行尾或行首与这种文本相匹配?

4 个答案:

答案 0 :(得分:2)

/\t{2,}/\t/

用一个字符替换两个或多个标签。

答案 1 :(得分:1)

您正在尝试匹配字符串"\r",对吧?你必须逃脱转义角色才能做到这一点:

"(\\r)*"

此表达式将匹配"\r"任意次。它有效,因为"\\"转义为文字"\"。您也可以应用相同的想法来匹配"\t"

答案 2 :(得分:1)

您可以将\\t\\t\\t替换为\\t{3}

答案 3 :(得分:1)

对于tab char,请使用以下内容:

/(\t)*/\1/g
  1. 使用一个字符(标签字符串)创建一个组,并尽可能地匹配它。
  2. 将完整匹配替换为单个字符
  3. (全局)使用该模式作为全文。
  4. 然后,您可以对要替换的其他转义字符使用相同的表达式。