2012-10-22 26 views
1

我有以下問題:爲什麼第二圖案沒有發現或捕獲C#

我想從一個工具我們的開發人員使用

這裏分析的txt文件輸出爲我的文件片段看着


DAT1    DAT(IL) 
:NAME   R|OM_SW_1_ILP|AG 

現在我需要做的是尋找DAT1,然後馬提起以下:NAME及其對應的文字DAT

這裏是我使用的正則表達式模式,似乎只找到DAT而不是名稱。

^(?<number>DAT[0-9]{1,3}).*(?<name>:NAME)? 

我用快報測試一噸不同的組合,但沒有工作

請幫

+1

這看起來像多-line,您向RegEx提供哪些選項?什麼是線路結構? –

+0

所以基本上你想要字符串'R | OM_SW_1_ILP | AG'?或者這個*和*'DAT(IL)'? – sloth

回答

2

您可以使用RegexOptions.Singleline

SINGLELINE

指定單行模式。更改點(。)的含義,使其匹配每個字符(而不是除\ n之外的每個字符)。

用於跨多行匹配模式。

而且你正在尋找一個正回顧後:NAME後找到文本


實施例:

void Main() 
{ 
    var s = @"DAT1    DAT(IL) 
       :NAME   R|OM_SW_1_ILP|AG"; 
    var p = @"^(?<number>DAT[0-9]{1,3}).*(?<=:NAME\s+)(?<name>[^\s]*)"; 
    var m = Regex.Match(s, p, RegexOptions.Singleline); 
    m.Groups["number"].Value.Dump(); 
    m.Groups["name"].Value.Dump(); 
} 

結果:

DAT1
- [R | OM_SW_1_ILP | AG

+0

我不知道你是否真的想'DAT1'或'DAT(IL)',但是很容易調整我的示例中的模式以使用第二個後視。 – sloth

1

:NAME...應該是一個新行?如果是這樣,則必須設置RegexOptions.Multiline選項,或者明確地匹配換行符,例如[\r\n]+,因爲.與換行符不匹配。

另外,考慮製作.*非貪心,.*?

0

你必須使用single line mode,以配合您所需要的數據

(?<number>DAT[0-9]{1,3})(?<reqData>.*?)(?<name>:NAME) 

//reqData group now contains your data 

沒有必要在這裏使用^,因爲你將可以包含其他數據的文本文件中的文本匹配..

相關問題