直接问题:我如何使用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(?=.*]")
我尝试的每次迭代都还包含了第一个"[
和最后一个]"
之间的每个换行符
我还要感谢解决潜在问题的任何其他方法
答案 0 :(得分:2)
如果您可以使用Notepad ++之外的其他工具,则可以使用此正则表达式(请参阅regex101上的工作示例):
(?!\n(([^"]*"){2})*[^"]*$)\n
它使用负前瞻来查找仅在未跟随偶数引号时的换行符。您可以使用<br>
,空格或任何适当的替换它们。
<强>故障:强>
(?! ... )
这是负面的前瞻,因为它的零宽度是必要的。任何匹配它的东西仍然可以再次匹配。
(([^"]*"){2})*
这是另一个关键部分。它确保偶数对的非引号字符后跟引号。
[^"]*$
这确保在字符串结束之前没有更多的引号。
<强>警告:强>
我无法在Notepad ++中使用它,因为它始终将$
识别为行的结尾,而不是整个字符串的结尾。
答案 1 :(得分:0)
布莱恩的精彩回答。我添加了一个只考虑实际换行符(即\ n \ r)的选项,它适用于我的CSV文件:
(?!\n|\r(([^"]*"){2})*[^"]*$)\n|\r