直接问题:如何使用 REGEX 环视来查找一组字符之间出现的\r\n 实例(位于开始和结束标记中),"[
和]"
里面还有任意字符和换行符?
情况:
我有一个大型数据库导出到制表符或逗号分隔的文本文件,我正在尝试将其导入到 Excel 中。问题在于,某些单元格来自包含换行符的文本区域,并用双引号限定。导入 Excel 时,这些换行符将被视为新行。我无法调整文件的导出方式。我需要保留数据,但确切的格式不需要保留,因此我计划使用一些占位符来返回
或 ~
这是我的数据格式的一般说明:
column1rowA column2rowA column3rowA column4rowA
column1rowB column2rowB "column3rowB
3Bcont
3Bcont
3Bcont
" column4rowB
column1rowC column2rowC column4rowC
column1rowD column2rowD "column3rowD
3Dcont" column4rowD
我的想法是尝试在 Notepad++ 中使用 REGEX 搜索和替换来选择和替换引号内的换行符。为了尝试更简单,我尝试在双引号中添加一个字符来帮助指示它是左引号还是右引号:
"[column3rowB
3Bcont
3Bcont
3Bcont
]"
我是正则表达式新手。我取得的进展(不多)是:
(?<="[)
缺少某种通配符 \r\n(?=.*]")
我尝试过的每次迭代都还包含第一个 "[
之间的每个换行符。最后]"
我也很感激任何其他解决根本问题的方法
最佳答案
如果您可以使用 Notepad++ 以外的其他工具,则可以使用此正则表达式(请参阅我在 regex101 上的工作示例):
(?!\n(([^"]*"){2})*[^"]*$)\n
仅当后面没有偶数个引号时,它才使用负向前查找来查找换行符。您可以将它们替换为 <br>
、空格或任何合适的内容。
分割:
(?! ... )
这是负前瞻,这是必要的,因为它是零宽度。任何与之匹配的内容仍然可以再次匹配。
(([^"]*"){2})*
这是另一个关键部分。它确保偶数对非引号字符后跟引号。
[^"]*$
这可以确保从那里开始直到字符串末尾不再有引号。
警告:
我无法让它在 Notepad++ 中工作,因为它总是识别 $
作为一行的结尾,而不是整个字符串的结尾。
关于regex - 使用 REGEX 查找包装内容中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27002707/