2013-06-27 34 views
0

我正在處理一些混亂的xaml。標籤有他們自己的nameTabIndex,這在我的情況下都是不必要的。看看下面的例子標籤元素,用正則表達式清理xaml

<Label Canvas.Left="20" Canvas.Top="40" x:Name="Page2Label15" Width="40" TabIndex="40">Great Label</Label> 

我如何可以使用Visual Studio 2012(或其他XAML編輯器),而不針對誤報刪除不需要nameTabIndex屬性?由於誤報,我的意思是像我需要保留的下面的東西。

<TextBox Canvas.Left="20" Canvas.Top="40" x:Name="Page2Textbox15" Width="70" TabIndex="40">Great Label</TextBox> 

看起來這應該是可能的,因爲在VS 2012查找和替換允許使用正則表達式。我無法使look around regular expressions正常工作。

我想最終的結果是:

<Label Canvas.Left="20" Canvas.Top="40" Width="40">Great Label</Label> 

回答

1

我不知道的Visual Studio的正則表達式的能力,但你可以試試這個查找/替換:

search: (<Label [^>]+?)(?:(?:x:Name|TabIndex)="[^"]*")([^>]*?)(?:(?:x:Name|TabIndex)="[^"]*")([^>]*>) 
replace: $1$2$3  or  \1\2\3 

的想法是捕獲標籤標籤的所有內容,而不是要刪除的屬性,然後僅用捕獲的字符串進行替換。

編輯:似乎這種模式只適用於兩個醜陋的屬性時。 你可以用一個只有一個屬性中刪除的情況:

search: (<Label [^>]+?)(?:(?:x:Name|TabIndex)="[^"]*") 
replace: $1 

(或只把這個圖案兩次)

注意:您可以嘗試用記事本這些圖案++(採取的最後一個版本)

+0

不幸的是VS 2012的正則表達式似乎並不喜歡它。你知道另一個編輯器或腳本,這將工作嗎? –

+0

@RyanGates:我建議你用記事本++ –

+0

測試這些模式謝謝。這對記事本++ 6.3.2(UNICODE)有效。 –

0

Visual Studio使用非常特殊的正則表達式引擎。我不是在談論.Net框架,我的意思是實際的VS GUI。這是非常糟糕的。

Visual Studio Regex Example

反正...嘗試這樣的事情...

{\<Label[^\>]*}(x\:Name|TabIndex)=:q 
Replace with \1 

你不得不兩次運行它。

如果我正確閱讀,:q應匹配引號中的所有內容,包括引號。此外,您可以使用括號作爲子表達式,但捕獲組實際上使用的是花括號,它們在通常的正則表達式中通常是量詞。很奇怪。最後,冒號和GT/LT符號是特殊字符,所以我必須逃避所有這些。

+0

您是否能夠在VS 2012中使用該工具?我無法得到它的工作。 –

+0

我仍然沒有任何運氣與新版本。 –

+0

我在最後一秒添加了'?'作爲正則表達式的習慣......結果VS不喜歡那樣。立即複製/粘貼。 – Suamere