删除variable = int之前和之后的所有内容

时间:2013-04-05 05:41:24

标签: regex notepad++

我在正则表达式上很糟糕,需要删除大部分文本中的所有内容,除了多次发生的某个变量声明之外,我想删除除mc_gross = anyint实例之外的所有内容。

3 个答案:

答案 0 :(得分:3)

通常我们需要使用“负面外观”来查找除指定字符串之外的所有内容。但这些效率相当低(尽管在这种情况下你可能不太关心),并且所有正则表达式引擎都不支持环视(不确定notepad ++,甚至可能取决于你使用的版本)。

如果您有兴趣了解该方法,请参阅How to negate specific word in regex?

但无论如何,因为你 使用记事本++,我建议选择目标,然后反转选择。

这将选择每个实例,允许'='符号两侧的可选空格。

mc_gross\s*=\s*\d+

以下超级用户的回答解释了如何在notepad ++中使用书签来实现“反向选择”:

https://superuser.com/questions/290247/how-to-delete-all-line-except-lines-containing-a-word-i-need

将那些正在使用的正则表达式替换为上面的正则表达式。

答案 1 :(得分:2)

您可以使用^.*\b(mc_gross\s*=\s*\d+)\b.*$\1进行正则表达式替换。这将删除除每行所需文本之外的所有内容。请注意,在所需文本出现两次或更多次的行上,只会保留一次。在搜索中,^.*\b匹配从行开头到想要文本之前的单词边界; \b.*$匹配从通缉文本后的单词边界到行尾的所有内容;圆括号捕获替换文本的通缉文本。如果abcmc_gross=13def等文字应匹配并保留为mc_gross=13,请从搜索中删除\b

要删除不需要的行,请从标记标签中搜索^mc_gross\s*=\s*\d+$正则表达式,勾选书签行,然后点击标记全部。然后使用菜单 => 搜索 => 书签 => 删除未标记的行

答案 2 :(得分:1)

查找内容: [\s\S]*?(mc_gross=\d+|\Z)
替换为: \1

将光标放在文本的开头,然后全部替换

如果您认为有必要,请在\b附近添加字词边界mc_gross=\d+