2009-11-06 29 views
-1

我想選擇給定字符串內的文本塊。這些文本塊具有幾乎相似的模式。 例如,在下面給出的文本中,我想捕獲以「客戶端」開始的行,即,我想選擇下面文本中給出的3個客戶端的信息。 有時候,這些信息可能不以單詞「客戶」開始,它可能以單詞「客戶」或「項目名稱」或「僱主」字開頭。如何使用正則表達式來捕獲重複文本塊?

1. Client Name 
      The XXX Company 
Title 
      Application Dev Office 
Period 
      September 2008 Till date 
Role 
      Quality Analyst Lead 
Responsibilities 
     Testing 

Client Name 
      The XYZ Company 
Title 
      Application web 
Period 
      September 2009 Till date 
Role 
      Quality Tester Lead 
Responsibilities 
     Testing and destroying 


3) Client Name 
      The 1234 Company 
Title 
      Application web RIA 
Period 
      September 2209 Till date 
Role 
      Quality Lead 
Responsibilities 
     Developer 

我已創建了一個正則表達式,這和其計算方法如下:

(\n|\r|\a|\f)(\s|\d|\.)*? 
(?<id>(Client|Customer|Role|Organi(s|z)ation|Vendor|Company|Employer)) 
(\s|\S)*?(?=(\n|\r|\a|\f)(\s|\d|\.)*?(\k'id'))*? 

我用(\n|\r|\a|\f),因爲當我從文件加載文本字符串變量,^無法識別這些字符。

這個正則表達式的問題在於,它能夠識別前兩個客戶端的信息,但它無法識別最後一個客戶端的信息。

任何人都知道如何爲此發展正則表達式? 我爲此使用C#。

在此先感謝。

------------------編輯部分-------------------

我需要開發正則表達式,如果客戶端相關信息以單詞「客戶端」開始,則查看是否存在像「角色」,「環境」,「供應商」這樣的詞。如果存在這樣的詞,那麼我們只能說它是客戶相關信息。 但在某些情況下,這些信息可能以「僱主」之類的詞開頭。在這種情況下,我們仍然需要搜索「角色」,「環境」,「供應商」等詞。 也就是說,如果單詞「客戶端」匹配我創造了我的正則表達式像

(?<id>(Client|Customer|Role|Organi(s|z)ation|Vendor|Company|Employer)) 

的理由,那麼任何的除「客戶端」的話應該與後續文本。 如果找到任何單詞,則再次開始尋找「客戶端」。

+1

編輯後,我不知道你在做什麼。在你編輯的部分,你突然說每個客戶都應該有一個「角色」,「環境」和「供應商」,但在你的文本中沒有提到「環境」。除了「客戶」記錄外,這兩個例子都沒有給出。要獲得有意義的回覆,最不重要的應該是給出你想要匹配的所有記錄類型的例子,並清楚地指出你想要提取哪些部分。 – 2009-11-06 12:03:57

回答

0

您正則表達式可翻倒由於「)」關於項目3.添加)的正則表達式,它似乎罰款下去:

(\n|\r|\a|\f)(\s|\d|\.|\))*?(?<id>(Client|Customer|Role|Organi(s|z)ation|Vendor|Company|Employer))(\s|\S)*?(?=(\n|\r|\a|\f)(\s|\d|\.)*?(\k'id'))*? 
+0

我檢查了我的舊正則表達式,並修改它爲你建議,但仍然沒有得到期望的結果。 – Shekhar 2009-11-06 12:09:04

0

這會抓住每一個客戶端塊,如果是這樣的你想要什麼:

Regex regexObj = new Regex("^[^A-Za-z]*Client(?:(?!^[^A-Za-z]*Client).)*", RegexOptions.Singleline | RegexOptions.Multiline); 
相關問題