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

时间:2014-11-18 19:46:59

标签: regex notepad++ regex-lookarounds

直接问题:我如何使用REGEX外观来查找一组字符(在开放标记和结束标记中),"[]"之间发生的\ r \ n实例内部的字符和换行符?

情况:

我有一个大型数据库导出到tab或逗号描述的文本文件,我试图导入到excel。问题是某些单元格来自包含换行符的文本区域,并且由双引号限定。导入到Excel中,这些换行符被视为新行。我无法调整文件的导出方式。我需要保留数据,但确切的格式不是,所以我打算使用一些占位符来返回或者

以下是我的数据格式的一般说明:

column1rowA    column2rowA    column3rowA    column4rowA
column1rowB    column2rowB   "column3rowB
3Bcont
3Bcont
3Bcont

"    column4rowB
column1rowC    column2rowC                   column4rowC
column1rowD    column2rowD   "column3rowD
3Dcont"    column4rowD

我的想法是尝试使用REGEX搜索选择并替换引号中的换行符并在Notepad ++中替换。为了尝试制作更简单,我尝试在双引号中添加一个字符,以帮助指示它是开头还是收盘:

"[column3rowB
3Bcont
3Bcont
3Bcont

]"

我是REGEX的新手。我所取得的进展(并不是很多)是:

(?<="[)缺少某种通配符\r\n(?=.*]")

我尝试的每次迭代都包含了第一个"[和最后一个]"之间的每个换行符

我还要感谢解决潜在问题的任何其他方法

2 个答案:

答案 0 :(得分:2)

如果您可以使用Notepad ++之外的其他工具,则可以使用此正则表达式(请参阅regex101上的工作示例):

(?!\n(([^"]*"){2})*[^"]*$)\n

它使用负前瞻来查找仅在未跟随偶数引号时的换行符。您可以使用<br>,空格或任何适当的替换它们。

<强>故障:

(?! ... )这是负面的前瞻,因为它的零宽度是必要的。任何匹配它的东西仍然可以再次匹配。

(([^"]*"){2})*这是另一个关键部分。它确保偶数对的非引号字符后跟引号。

[^"]*$这确保在字符串结束之前没有更多的引号。

<强>警告: 我无法在Notepad ++中使用它,因为它始终将$识别为行的结尾,而不是整个字符串的结尾。

答案 1 :(得分:0)

布莱恩的精彩回答。我添加了一个只考虑实际换行符(即\ n \ r)的选项,它适用于我的CSV文件:

(?!\n|\r(([^"]*"){2})*[^"]*$)\n|\r