我在正则表达式方面很糟糕,需要从大部分文本中删除所有内容,除了多次出现的某个变量声明,我喜欢删除除了 mc_gross=anyint 实例之外的所有内容。
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
用上面的替换他们在那里使用的正则表达式。
你可以做一个正则表达式替换^.*\b(mc_gross\s*=\s*\d+)\b.*$
with \1
。这将删除除每行所需文本之外的所有内容。请注意,在所需文本出现两次或多次的行上,只会保留一次出现。在搜索中,^.*\b
从行首到所需文本之前的单词边界的匹配;\b.*$
匹配从所需文本之后的单词边界到行尾的所有内容;圆括号捕获替换文本的所需文本。abcmc_gross=13def
如果应该匹配并保留诸如文本之类的文本,则从搜索中mc_gross=13
删除\b
s。
^mc_gross\s*=\s*\d+$
要删除不需要的行,请从标记选项卡执行正则表达式搜索,勾选书签行并单击全部标记。然后使用Menu => Search => Bookmark => Remove unmarked lines。
查找内容: [\s\S]*?(mc_gross=\d+|\Z)
替换为: \1
将光标放在文本的开头,然后全部替换。
如果您认为有必要,请\b
在周围添加单词边界。mc_gross=\d+