2011-08-31 42 views
1

我真的不知道該如何授權,但我需要一些正則表達式的幫助。首先,我想澄清一下,我並不試圖匹配HTML或XML,雖然它可能看起來像,但事實並非如此。下面的東西是我用於指定哪些細節應該在該程序中導出的程序的文件格式的一部分。沒有參與層次,只是每一個新的行包含一個「標籤」:正則表達式幫助(再次)

<n> 

這與我的計劃匹配找到一個枚舉,它告訴我的計劃,以出口的名義值,反正我也有這樣的標籤:

<adr:home> 

這指定了家庭住址。我用下面的正則表達式:

<((?'TAG'.*):(?'SUBTAG'.*)?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?> 

的問題是,正則表達式將拆分ADR:家標籤罰款,但無法找到n個標籤,因爲它缺乏一個冒號,但是當我加入?或一個*,然後它不會拆分adr:主頁和類似的標籤。誰能幫忙?我相信這只是簡單的,這只是我第一次創建正則表達式。順便說一下,我正在使用C#。

+0

會發生什麼,如果您將「:」成子標籤捕獲組。像(?'SUBTAG':。*)?.然後,您可以從該捕獲組中刪除前導':'。 – arunkumar

+0

這似乎也沒有工作。它仍將整個事件返回到TAG組,並將SUBTAG組留空。 – user646265

+0

你需要讓TAG羣組無任何貪婪,看到我的答案。 –

回答

1

這樣做是否有助於

<((?'TAG'.*?)(?::(?'SUBTAG'.*))?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?> 

我包裹:捕捉到非捕獲組輪子標籤並做標記捕獲非貪婪

+0

謝謝,這似乎解決了它。 – user646265

0

如果你把冒號作爲第二個標籤的一部分呢?

<((?'TAG'.*)(?':SUBTAG'.*)?)?(\s+((\w+)=('|"")?(?'VALUE'.*[^'])('|"")?)?)?> 
+0

不,這不起作用。你確定你說得對,冒號不應該是組名的一部分,應該嗎? – user646265

1

不能完全確定你的目標是,但試試這個:

(?><)(?'TAG'[^:\s>]*)(:(?'SUBTAG'[^\s>:]*))?(\s\w+=['"](?'VALUE'[^'"]*)['"])?(?>>) 

我發現this site測試C#正則表達式是非常有用的。

+0

這不起作用,似乎正在發生的事情是該程序沒有讀到冒號,只是將所有內容放入標籤組中。 – user646265

+0

那麼這樣嗎? (忽略正則表達式的第二部分)。 – TheCodeKing

+0

謝謝,這確實很好。 – user646265