Regexp搜索包含其他短语和don';别再做标记了

Regexp搜索包含其他短语和don';别再做标记了,regex,notepad++,Regex,Notepad++,类似的主题经常出现在这里,但即使分析它们,我仍然无法找到合适的regexp来完成我的任务。我有一个包含部分的XML文件。我需要删除包含给定属性的文本部分,并保留其他所有内容 示例文本部分: <Text FontFamily="Open Sans" FontSize="19" FontStyle="Normal" FontWeight="Normal" HorizontalAlign="Left" Left="803.0" Name="Back" Stroke="#CCCCC

类似的主题经常出现在这里,但即使分析它们,我仍然无法找到合适的regexp来完成我的任务。我有一个包含部分的XML文件。我需要删除包含给定属性的文本部分,并保留其他所有内容

示例文本部分:

<Text FontFamily="Open Sans" FontSize="19" FontStyle="Normal"
    FontWeight="Normal" HorizontalAlign="Left" Left="803.0"
    Name="Back" Stroke="#CCCCCC" TextDecoration="None"
    Top="126.0" Visibility="Hidden">
... More content here ...
</Text>
也是不恰当的。如果出现
Name=“Back”
,则regexp会标记正确的零件。但是如果这个特殊的短语不存在,那么它从
然后标记许多其他文本或非文本部分,直到找到为止
后跟文件末尾的
Name=“Back”
。所以它几乎标记了整个文件,许多文本,而不是文本部分

没有必要展示我在其他人的regexp解决方案基础上尝试创建的其他regexp试用版。最后的regexp没有标记或标记太多

我将非常感谢你的帮助


顺便问一下,我该如何逃脱
你很接近了,试试这个:

(?s)<Text[^>]*? Name="Back".*?>.*?<\/Text>
(?s)]*?Name=“Back”。*?>*?
请参阅

^我知道这不是记事本+,但它们都是PCRE


如果您将regex粘贴到我的regex101示例中,那么它将为您可视化问题,这就是
文本(.*Name=“Back”
,因为
(.*?
将继续捕获所有内容,直到它到达包含
Name=“Back”



<>你应该强烈考虑安装XPauliSernpp插件,这样你就可以使用XPath了。等效的XPath应该是
//text[@name='Back']

1。你必须用正则表达式和记事本++来做这件事吗?因为您可能应该只使用XML解析库2。在SO postsNo中使用
作为尖括号,而不是在记事本++中。在npp中不可能做到这一点吗?格式化
似乎很有效。它在没有>的情况下工作*?但我知道这是检查的附加条件。如何在[^>]中排除多于>个相似项?我之前试过使用(?!Text),但没有用。@KrzysztofJachowicz当然,有时候我更喜欢表达而不是简洁,尤其是当涉及到
(?s)
时;如果不小心,它会把你一整天都搞砸。另外,考虑安装XPaTeSeriNPP插件,以便可以使用XPath。等价的XPath应该是
//text[@name='Back']
@KrzysztofJachowicz我不知道你所说的“如何排除超过
的内容”是什么意思
[^]
是一个否定字符集,因此您可以向其中添加多个字符。您已使用[^>]指定了>不会出现在Name=“Back”之前的条件。有没有办法指定笔划单词而不是>之前不能出现?[^Stroke]不起作用,每个字符将分别处理。消极前瞻(?!Stroke)也不起作用,但我见过使用这种结构的类似示例。@KrzysztofJachowicz您是否要求
Stroke
特别不能出现在
Name=“Back”之前
或您希望忽略所有包含
笔划的
,而不考虑其在
中的位置?你会如何表述规则?“查找
是否包含
name=“back”
和无
笔划
”?无论如何,XPath将更加简单。
(?s)<Text[^>]*? Name="Back".*?>.*?<\/Text>