我正在研究一些混乱的xaml。 Label有自己的name
和TabIndex
,这在我的情况下都是不必要的。采用以下示例Label元素
<Label Canvas.Left="20" Canvas.Top="40" x:Name="Page2Label15" Width="40" TabIndex="40">Great Label</Label>
如何在不针对误报的情况下使用Visual Studio 2012(或其他xaml编辑器)删除不需要的name
和TabIndex
属性?假阳性,我的意思是下面我需要保留的东西。
<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>
答案 0 :(得分: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 ++(采用最新版本)
来尝试这些模式答案 1 :(得分:0)
Visual Studio使用非常特殊的正则表达式引擎。我不是在谈论.Net Framework,我的意思是实际的VS GUI。这很糟糕。
无论如何......尝试这样的事情......
{\<Label[^\>]*}(x\:Name|TabIndex)=:q
Replace with \1
你必须运行两次。
如果我读得正确,:q
应匹配引号中的所有内容,包括引号。此外,您可以使用括号作为子表达式,但Capture-Groups实际上使用Curly-Braces,它通常是正常正则表达式中的量词。很奇怪。最后,Colon和GT / LT符号是特殊字符,所以我不得不逃避所有这些。