0

我正在处理一些杂乱的xaml。标签有自己的nameand TabIndex,这在我的情况下都是不必要的。以下面的示例标签元素为例,

<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 Find and Replace 允许使用正则表达式。我很难让正则表达式的外观正常工作。

我希望最终结果是:

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

2 回答 2

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

(或仅使用此模式两次)

注意:你可以用notepad++试试这些模式(取最后一个版本)

于 2013-06-27T15:59:26.247 回答
0

Visual Studio 使用一个非常特殊的正则表达式引擎。我不是在谈论 .Net 框架,我指的是实际的 VS GUI。这有点恶心。

Visual Studio 正则表达式示例

无论如何......尝试这样的事情......

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

你必须运行它两次。

如果我没看错,:q应该匹配引号中的所有内容,包括引号。此外,您可以将括号用作子表达式,但 Capture-Groups 实际上带有花括号,它们通常是普通正则表达式中的量词。很奇怪。最后,冒号和 GT/LT 符号是特殊字符,所以我不得不转义所有这些字符。

于 2013-06-27T16:35:55.373 回答