regex - 使用 REGEX 查找包装内容中的换行符

标签 regex notepad++ regex-lookarounds

直接问题:如何使用 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/

相关文章:

正则表达式:以任意顺序匹配特定字符,每个字符的出现次数不超过指定的次数

notepad++ - 有没有人有一个 Notepad++ 插件可以生成 UUID 并插入它们

java - 正则表达式中的通配符仅在停用词之前是贪婪的

java - 正则表达式匹配字符串中最后出现的大写单词和另一个单词之间的所有字符

javascript - 正则表达式跨多行捕获两个标签之间的所有内容

ruby - 修改正则表达式以匹配扩展的文件夹结构

javascript - 使用正则表达式呈现格式化的电话号码

Notepad++ - 突出显示自定义关键字

regex - Eclipse文件搜索正则表达式操作

regex - 捕获组的负前瞻