2014-02-25 58 views
0

我有以下自制的定義,在我們的客戶檔案:查找字符串,很多名字被不知道在同一時間在一個字符串

<bitmaskdef name=SDC_STATUS_BITMASKM_1> 

..content 

</bitmaskdef> 

我不得不讀出的開放和之間的內容關閉bitmask def的標籤。 爲了更好地實現這一點,我已經使用正則表達式在我的C#代碼如下:

var bitmaskDefinitionRegex = new Regex(string.Format(@"<bitmaskdef name={0}>(.*?)</bitmaskdef>", bitmaskName)); 

bitmaskName包含了我們正在尋找掩碼的名稱,例如:SDC_STATUS_BITMASKM_1

現在,我們的客戶希望改變定義如下:

<bitmaskdef name=SDC_STATUS_BITMASKM_1; SDC_STATUS_BITMASKM_2; SDC_STATUS_BITMASKM_3; SDC_STATUS_BITMASKM_4> 

...content 

</bitmaskdef> 

這樣他就可以爲定義設置多個名稱。使用目前的解決方案,它無法獲得定義之間的內容。這就是爲什麼我想改變我的RegEx,但它目前不知道如何。重要的是要知道,我總是隻知道其中的一個名字。

例如:

  • 讀出了名SDC_STATUS_BITMASKM_1
  • 查找名稱SDC_STATUS_BITMASKM_1
  • 讀出了名SDC_STATUS_BITMASKM_2
  • 定義查找名稱SDC_STATUS_BITMASKM_2
  • 閱讀的定義取出名稱SDC_STATUS_BITMASKM_X

到目前爲止,我目前的解決方案不起作用,因爲我只考慮一個名稱,但現在我需要一個解決方案來查找內容的定義,如果還有其他許多名稱定義的話。

更新#1 這是我尋找正則表達式匹配的方式。字段「fc」是我的「文本文件」的文件內容,其中包含類似xml的定義。

var bitmaskDefinitionMatch = bitmaskDefinitionRegex.Match(String.Join(String.Empty, fc.ToArray())); 
+3

您的數據看起來很像XML。爲什麼不使用XML和內置的XML庫而不是RegEx? – Enigmativity

+0

由於您提出的問題(即所需信息的一部分未知),似乎沒有可能的解決方案使用正則表達式或任何其他的東西。你應該關注什麼是肯定知道的(例如,結束標記),並使用這些信息來了解未知數。請注意,前一段時間,我爲與此類似的問題編寫了基於分割的解決方案,該解決方案也應與您一起工作(一旦得到正確,已知的輸入條件):http://stackoverflow.com/questions/22010313 /正則表達式與開始和結束字符串/ 22010714#22010714 – varocarbas

+0

@Enigmativity:是的它看起來像XML,但它不是一個XML文件。它是一個包含許多其他有線定義的文件,它們不是XML。 @ varocarbas:我必須在文本文件中讀取,開始和結束標記位於不同的行中。我已經對我的起始帖子進行了更新。到目前爲止,我得到整個文件內容並尋找關閉和結束標籤 –

回答

1

你可以使用

new Regex(string.Format(@"<bitmaskdef name=[^>]*?{0}(?:>|;[^>]*>)(.*?)</bitmaskdef>", bitmaskName)); 

它將匹配任何bitmaskdef標籤的名字屬性包括bitmaskName,演示在這裏:http://regex101.com/r/lR0kG6

相關問題