Regex 带有特定属性的正则表达式过滤器XAML标记
我有以下与XAML标记匹配的正则表达式: 这将返回以下两行:Regex 带有特定属性的正则表达式过滤器XAML标记,regex,xaml,Regex,Xaml,我有以下与XAML标记匹配的正则表达式: 这将返回以下两行: <Button x:Name="Button1" /> <Button x:Name="Button2" Content="foo" /> 我想做的是过滤掉包含“Content=“foo”的标记 也有类似的例子,但在这种情况下,引号把我绊倒了 有什么想法吗?Regex 更新以匹配完全相反的内容(根据OP的要求) 正则表达式 使用否定的前瞻断言,如 ])*> 这意味着匹配前面没有Content=“fo
<Button x:Name="Button1" />
<Button x:Name="Button2" Content="foo" />
我想做的是过滤掉包含“Content=“foo”的标记
也有类似的例子,但在这种情况下,引号把我绊倒了
有什么想法吗?Regex
更新以匹配完全相反的内容(根据OP的要求) 正则表达式 使用否定的前瞻断言,如
])*>
这意味着匹配前面没有Content=“foo”
,后面跟着
的0个或多个非code>([^>]*
)。为必要的分组添加括号
但请记住,使用正则表达式作为XML解析的替代品会让堆栈溢出上的人对您非常生气。。。所以最好匿名发布这样的问题 正则表达式
更新以匹配完全相反的内容(根据OP的要求) 正则表达式 使用否定的前瞻断言,如
])*>
这意味着匹配前面没有Content=“foo”
,后面跟着
的0个或多个非code>([^>]*
)。为必要的分组添加括号
但请记住,使用正则表达式作为XML解析的替代品会让堆栈溢出上的人对您非常生气。。。所以最好匿名发布这样的问题
这个。。。但是请不要使用正则表达式来解析XML
我们使用[^]
捕获的每个字符都会检查后面是否有一个空格和Content=“foo”
。如果为true,我们将失败,因此捕获将回滚一个字符,正则表达式将检查终止的
你必须点击一下,这样正则表达式就被激活了
一些小提示:这个正则表达式是错误的,因为它试图解析XML,但是忽略它,它不会被scocontent=“foo”
(忽略)或Content=“foo”
(捕获)或:Content=“foo”
(忽略)或Content=“foo”
(捕获)愚弄。如果您使用的正则表达式解析器将\s
视为与XML相同的空格字符列表:-),则这一点很明显,否则一些“奇怪的外来”空格可能会稍微破坏它。记住将其用于区分大小写的解析
这个。。。但是请不要使用正则表达式来解析XML
我们使用[^]
捕获的每个字符都会检查后面是否有一个空格和Content=“foo”
。如果为true,我们将失败,因此捕获将回滚一个字符,正则表达式将检查终止的
你必须点击一下,这样正则表达式就被激活了
一些小提示:这个正则表达式是错误的,因为它试图解析XML,但是忽略它,它不会被
scocontent=“foo”
(忽略)或Content=“foo”
(捕获)或:Content=“foo”
(忽略)或Content=“foo”
(捕获)愚弄。如果您使用的正则表达式解析器将\s
视为与XML相同的空格字符列表:-),则这一点很明显,否则一些“奇怪的外来”空格可能会稍微破坏它。记住将其用于区分大小写的解析 使用XML解析器。请看经典的stackoverflow帖子:上面是我真实问题的一个简化例子。我不能在实际问题的上下文中使用XML解析器,必须使用正则表达式。为什么你认为不能使用XML解析器?请发布你真正的问题,而不是那些解决方案对你的“真正问题”不起作用的“简化示例”。你应该始终标记你使用正则表达式的语言。考虑到您使用的是XAML,我认为这是C#语言。请使用XML解析器。请看经典的stackoverflow帖子:上面是我真实问题的一个简化例子。我不能在实际问题的上下文中使用XML解析器,必须使用正则表达式。为什么你认为不能使用XML解析器?请发布你真正的问题,而不是那些解决方案对你的“真正问题”不起作用的“简化示例”。你应该始终标记你使用正则表达式的语言。我认为这是C#考虑到你正在使用XAML。这非常接近!它实际上返回与我想要的相反的结果,我希望过滤掉Content=“foo”属性。仅供参考,因为我知道正则表达式在不同的上下文中表现不同,所以我用它来测试。感谢到目前为止的帮助,特别是对regex元素的周到描述。这非常接近!它实际上返回与我想要的相反的结果,我希望过滤掉Content=“foo”属性。仅供参考,因为我知道正则表达式在不同的上下文中表现不同,所以我用它来测试。感谢到目前为止的帮助,特别是对regex元素的深思熟虑的描述。这是一种有点奇怪的方式,但它应该产生正确的结果+从我这里得到1。但是,我建议将\s+
替换为\b
。@Justin否,除非您想捕获:内容。我的第一次迭代使用了它,但后来我改变了想法(我已经重写了至少三次这个正则表达式),我知道,但我个人不会为此担心。担心:内容可能是过火了。另外,在您当前的模式中,您可以将lookback中的[^]*\s+
替换为\s
,这将意味着相同的内容。@Justin Strange。。。我确信我的正则表达式是不同的。可能是从错误的RegExr复制粘贴的。Flash讨厌我,一半时间都不让我复制粘贴。我赞成过度杀戮!“如果你必须做某事,不妨把它做好”你仍然不需要+
。在您拥有的位置上,\s+
将执行与\s
相同的操作。这是一种有点奇怪的方式,但它应该会产生正确的结果+从我这里得到1。但是,我建议将\s+
替换为\b
。@Justin否,除非
/<[^>]*Content="foo".*?>/g
x = ['<Button x:Name="Button1" /><Button x:Name="Button2" Content="foo" /><Button x:Name="Button1" /><Button Content="foo" />']
console.log( x[0].match(/<[^>]*Content="foo".*?>/g) )
<((?!Content="foo")[^>])*>
<([^<>](?!\sContent\s*=\s*("foo"|'foo')))*>