1

我在正则表达式方面很糟糕,需要从大部分文本中删除所有内容,除了多次出现的某个变量声明,我喜欢删除除了 mc_gross=anyint 实例之外的所有内容。

4

3 回答 3

3

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

如果您有兴趣了解该方法,请参阅如何在正则表达式中否定特定单词?

但无论如何,由于您使用的是记事本++,我建议选择您的目标,然后反转选择。

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

mc_gross\s*=\s*\d+

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

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

用上面的替换他们在那里使用的正则表达式。

于 2013-04-05T05:47:01.247 回答
2

你可以做一个正则表达式替换^.*\b(mc_gross\s*=\s*\d+)\b.*$with \1。这将删除除每行所需文本之外的所有内容。请注意,在所需文本出现两次或多次的行上,只会保留一次出现。在搜索中,^.*\b从行首到所需文本之前的单词边界的匹配;\b.*$匹配从所需文本之后的单词边界到行尾的所有内容;圆括号捕获替换文本的所需文本。abcmc_gross=13def如果应该匹配并保留诸如文本之类的文本,则从搜索中mc_gross=13删除\bs。

^mc_gross\s*=\s*\d+$要删除不需要的行,请从标记选项卡执行正则表达式搜索,勾选书签行并单击全部标记。然后使用Menu => Search => Bookmark => Remove unmarked lines

于 2013-04-05T11:01:23.397 回答
1

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

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

如果您认为有必要,请\b在周围添加单词边界。mc_gross=\d+

于 2013-04-05T12:43:48.383 回答