regex-Notepad ++搜索并替换丢失的行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了regex-Notepad ++搜索并替换丢失的行相关的知识,希望对你有一定的参考价值。
我对正则表达式非常陌生,我正在尝试使用Notepad ++清理一些CSV文件。我正在运行版本7.8.2(64位),因为我的文件太大,无法打开32位版本。
在数据内,大多数字段已标准化,并由系统自动生成。用户可以在一个字段中输入评论,但是在某些情况下,用户已经在该字段中输入了换行符。发生这种情况时,Notepad ++会为此数据创建一个新行。
在一个简洁的示例中(第三行是第二行的延续):
“39901”, “PY02472311”, “183", “Vision Insurance”, “ ” LF
“39901”, “0002492405”, “2”, “Reallocate expenses from Other to Consulting. LF
For more information, contact Capo at (XXX) XXX-XXXX.”, “ ” LF
“39901”, “TV02576029”, “9”, “Travel Expense Accruals”, “ ” LF
我正在尝试删除第三行中多余的换行符,以使数据看起来像这样:
“39901”, “PY02472311”, “183", “Vision Insurance”, “ ” LF
“39901”, “0002492405”, “2”, “Reallocate expenses from Other to Consulting. For more information, contact Capo at (XXX) XXX-XXXX.”, “ ” LF
“39901”, “TV02576029”, “9”, “Travel Expense Accruals”, “ ” LF
没有回车符,只有换行符,因此搜索
也会标记应合法结束该行的所有换行符。
在这种情况下,数据的结构使得最后一列始终为空白(“”)
。因此,我尝试搜索结尾不为空的行-该行以字母,数字,句点,空格等结尾。我的计划是用唯一的奇数词替换这些实例,然后再进行第二次,扩展了搜索和替换范围,以摆脱新的表达式和换行符。
尽管不方便,但我一直在逐步进行:
d{1}$
查找最后一个字符为数字的行;w{1}$
查找最后一个字符为字母的行;s{1}$
查找最后一个字符为空格的行;和- [
.$
查找以句点结尾的行。
然后,我将进行最后一次搜索,以查找所有不以39901
开头的散列者。
我将这些搜索作为常规搜索运行,然后替换为REPLACEHERE999_
,我假设没有其他人输入数据。我知道这将删除并替换行中的最后一个字符-最终数字,字母,空格等-但我可以接受。在完成这些替换之后,我计划进行第二次扩展搜索,以换掉REPLACEHERE999_
和一个空格,同时摆脱REPLACEHERE999_
和换行。
[当我进行第一次搜索时,它们会根据我最初在Power Query中得到的错误数量进行合理的替换次数,例如d{1}$
的377。但是,一旦我进行了这些替换,行数就会大大减少。最初,我有3,919,186行,但是在第一次搜索和替换–d{1}$
–之后,我只有1,543,818行,不到开始时的一半。一次完成前几个替换项时,我不会丢失任何行,但是当我使用“全部替换”时,它们会消失。
同样,我只是从regex / Notepad ++开始,所以我可能缺少一些基本的东西。但是,如果我只进行有限数量的更换,为什么我的许多生产线都消失了?欢迎提出关于我的搜索或思想的评论和建议,但是消失的线条是此处的关键问题。
谢谢!
我相信您应该可以匹配(“[^”
]+)R+
并替换为1
。
在模式中,分组的部分从开始的引号开始匹配,直到遇到结束的引号或行尾字符为止。然后,它匹配后续的行尾字符,并通过省略行尾字符来替换整个行。
- Ctrl + H
- 查找内容:
R(?!“)
- 替换为:
LEAVE EMPTY
- 检查 环绕
- CHECK 正则表达式
- 全部替换
说明:
R # any kind of linebreak
(?!“) # negative lookahead, make sure we haven't “ after
屏幕截图(之前):
屏幕截图(之后):
以上是关于regex-Notepad ++搜索并替换丢失的行的主要内容,如果未能解决你的问题,请参考以下文章