2009-10-28 153 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. (全局)使用全文的模式。

然後,您可以對您要替換的其他轉義字符使用相同的表達式。