2013-10-31 48 views
1

我正在嘗試編寫一個匹配人類可讀引用值的正則表達式。作爲一個例子,XML屬性。我遇到的問題是,如果考慮屬性的結尾引號和後續屬性的開始引用,引用區域之間的數據實際上也是引用的。這裏的表達我到目前爲止:正則表達式只返回所有其他匹配

(?<=\")(?(?!\s+\")[^\"]+)(?=\") 

我試圖用簡單的英語表達是:一個報價(不捕獲它),如果沒有後面只是空間在另一個報價終止,而不是匹配任何報價後跟另一個報價(不包括最後一個報價)。

,這裏是我的樣本數據:

<computer name = "printserver" model = "1000ZS" /> 

正則表達式產生3場比賽:

  1. 打印服務器
  2. 模型=
  3. 1000ZS

我想,如果我可以找到一種方法來告訴章程ex引擎跳過每隔一次我會擁有它。

這裏的另一種樣本數據集,有點像QML類屬性:

field1: "value1" field2: "value2" field3: "value3" 

我能「看到」引用的數據,而是通過正則表達式提取它打我:-)

我m使用我的項目中的.NET 4.5 System.Text.RegularExpressions框架。我沒有針對像XML,JSON,QML等特定標記,但我正在尋找一種通用的正則表達式,它只會獲取類似於我們如何將數據解釋爲人類的引用值...

任何建議?謝謝!

+1

爲什麼不只是使用XML解析器? –

+0

我會用一個正則表達式來捕獲任何(鍵)=「(值)」,然後你從第二組中獲得值。 –

+0

我編輯我的問題,試圖提供更清晰。謝謝。 – Jace

回答

2

您可以隨時消耗的報價在你的對手:

\"([^\"]+)\" 

並提取從第一個捕獲組需要的部分。

如果它明確地前面有一個空格報價,那麼你可以使用你所使用的部分,一個小的調整:

\"((?:(?!\s+\")[^\"])+)\" 

,如果你只知道字符串包含簡單的模式這樣的,也許像這樣:

(?:(?!\s+\")[^\"])+(?=\") 
+0

對你的第一個模式稍作調整,「([^ \」] *)「,我只捕獲我想捕獲的區域,包括引號。是否可以使用,但不捕獲引號?謝謝 – Jace

+1

@Jace正則表達式根本沒有捕獲到引號,第一個捕獲組只有引號之間的部分,最後一個正則表達式根本不匹配引號,你可以添加'(?<= \「)'在開始時如果你使用'*'而不是'+'作爲量詞,否則你會得到額外的結果。 – Jerry

+0

你是對的。太感謝了。我在學習,儘管慢慢地:-) – Jace

相關問題