我的格式错误的CSV文件有两列:文字,值
该值为1或0,但某些行格式错误并且跨越两行:
1. "This line is fine, but there are some that are not like this",0
2. "Another good line",1
4. "Oh, I'm so bad!!
5. I spanned two lines!",0
6. "Why did you break me? FileHelpers can't read two lines!!",1
第4行和第5行应该是一行,但是我得到的CSV文件被破坏并且它们跨越两行,这导致FileHelpers引擎在读取csv文件时失败。
我有两个CSV文件,每个文件大约有3000行,我只需要修复一次。我想使用notepad ++来查找所有未结尾的行,0或1,我可以使用哪种正则表达式?或者也许是正则表达式,一个用于0,另一个用于1个案例。
更新
Dan的答案在没有逗号[^ 01] $而不是[^ 01] $的情况下工作,但它只匹配不以0或1结尾的行...它在我的情况下运行得很好,但它确实跳过了被打破,实际上以0或1结束。
答案 0 :(得分:2)
,[^01]$
确保正则表达式模式已开启。
答案 1 :(得分:2)
您将使用的表达式是
([^,].|,[^01])$
但不幸的是,notepad ++不支持交替(|
运算符)。 [1]
您可以使用这两个表达式匹配虚线:
[^,].$
,[^01]$
当然,除非“文字”部分以,0
或,1
本身结尾。 : - )
[1] http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Unsupported_Regex_Operators
答案 2 :(得分:1)
我不知道其他答案如何起作用:
以下是我在Notepad ++中使用的东西
[^,][^01]$
以下是我所做的步骤:
使用([^,][^01])$
匹配这些行,并替换为\1{marked}
然后切换到扩展模式并将{marked}\r\n
替换为``(空)以获得单行。
屏幕截图如下:
答案 3 :(得分:0)
通常,要匹配不以特定模式结尾的行,可以使用
^(?!.*pattern$).*$
其中^
与行的开头匹配,(?!.*pattern$)
是一个负向超前,如果除换行符以外的其他0个或多个字符,则匹配失败({{1 }}),然后在行{.*
的末尾加上pattern
,而$
实际上与行匹配。
要删除未以某种模式结尾的行以及结尾处的换行符,请使用
.*$
其中^(?!.*pattern$).*\R?
是可选的换行符序列。
如果有多个固定字符串,则可以使用
\R?
如果在行尾仅检查一两个固定的字符串,则可以使用更快的正则表达式,例如
^(?!.*(?:pattern|pattern2|patternN)$).*\R?
将匹配不以^.*$(?<!a)(?<!bcd)
和a
结尾的任何行。
bcd
因此,对于当前问题,要匹配不以^.*$(?<!1)(?<!0)
或1
结尾的行,可以使用
0
或者
^(?!.*[01]$).*$ # without the line break
^(?!.*[01]$).*$\R? # with the line break
要删除/替换不以特定模式结尾的行上的换行符,您可以使用
^.*(?<![01])$ # without the line break
^.*(?<![01])$\R? # with the line break
替换为空字符串(以删除换行符)或任何其他定界符字符串或字符。