在Notepad++中查找不以引号"开头的行

64

我试图验证一个CSV文件,在这个文件中我们遇到了换行符的问题。

我希望找出所有不以"开头的行。

我尝试使用/^"/gim,但是否定符!没有起作用。

如何正确地否定/^"/gim

3个回答

88
在正则表达式中,!并不表示否定;相反,你需要使用[^"]来否定一个字符集。方括号[]表示一个字符集,如果它以^开头,则表示“不是这个字符集”。
因此,如果您想匹配不是双引号的内容,您应该使用[^"];如果您不想匹配任何引号,可以使用[^"']等。
在Notepad++中,您应该能够使用以下搜索条件来查找不以"字符开头的行:
^[^"]

如果您想突出显示整行,请使用:

^[^"].*

4
我认为令人困惑的是,尖角符号(^)在不同的上下文中有两个意思。它可以表示“以...开始”和“非”,或者我理解错了吗? - Davos
如果我不想要某些组合怎么办? 例如,我想在SQL查询中为字段名称添加别名,除非有一个设置(在SQL中,您只需使用“table.fieldname as alias”设置别名),因此我有一个正则表达式,但如何确保它仅匹配那些没有别名的字段。 (OTHERREGEX-HERE)(^([\s]+[Aa][Ss]))似乎不起作用... - MahNas92
1
@MahNas92 这听起来像是一个值得在网站上提出单独问题的内容,因为这个答案太长了,不适合在评论中回答。 - newfurniturey
@newfurniturey 或许以后会有,但我可以和其他人分享我的 C# 解决方案;我只是制作了一个正则表达式,用于获取变量中的最后一个正则表达式模式,如此:([\s]+[Aa][Ss])?),然后我使用编程逻辑检查这个最后一行是否为空来决定它是否真的匹配... - MahNas92

46
在Notepad++中,您可以使用非常有用的负向前瞻(negative lookahead)。在您的情况下,您可以尝试以下操作:

在Notepad++中,您可以使用非常实用的负向前瞻

在您的情况下,您可以尝试以下操作:

^(?!")

如果你想匹配整行,可以加上.+.{1,7}或其他任何内容,例如:


^(?!").*

它也将匹配空行。

解释部分

^表示行的开头

(?!regexp)负向先行断言部分:这意味着如果正则表达式匹配,结果将不会被显示。


3
谢谢,这是一种通用方法,适用于多个字符匹配! - terales

10

步骤1-匹配行。在“查找”对话框的“标记”选项卡中,您可以将与之匹配的行加为书签。

步骤2-删除已加书签的行或未加书签的行。搜索> 书签> 删除未标记的行或删除已加书签的行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接