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