我最近收到了一个包含60个字段的制表符分隔文件。每个字段都可以包含任何字符。我收到的出口也有一些领域的换行和回车。这导致选项卡分隔文件无法正确导入。如果该行没有59个标签,是否有办法删除换行符和回车符?每个标签之间可能有也可能没有数据。
第3,4,5行是我试图解决的问题。
答案 0 :(得分:1)
警告:我假设列数据中没有标签。如果有,那么你需要的东西比我在这里的能力更强大。
以下适用于sample input provided:
首先,使用不会在文件中的任何位置出现的字符替换所有换行符。您甚至可以使用无法用键盘输入的字符。
找到:(\r\n?|\n)
替换为:\xB6
然后,匹配60个字段的行并为它们提供换行符(我将使用Windows风格):
找到:^(([^\t]*\t){59}[^\t\xB6]*)\xB6
替换为:$1\r\n
我在这里做了一个很大的假设:第60列永远不会包含换行符。如果这是错误的,那么您将会在下一条记录的第1列中以某些第60列的数据结束。
现在,如果您不喜欢在数据中显示该段落符号,您可以清除它或用您喜欢的任何内容替换它:
找到:\xB6
替换为:
匹配模式的说明:
(\r\n?|\n)
匹配三种换行符中的任何一种,即单\r
,单\n
或Windows风格\r\n
。 Wikipedia has a whole article about this
请参阅http://regex101.com/r/iB6fK9以探索^(([^\t]*\t){59}[^\t\xB6]*)\xB6
模式。
^
匹配行的开头。([^\t]*\t){59}
完全匹配59次。这让我们得到了前59个以制表符分隔的列。此组仅捕获第59列。[^\t\xB6]*
。\r\n
替换插入的$1\r\n
替换它。答案 1 :(得分:0)
我从您的问题中了解到,您要从文件中删除\r\n
窗口,为此,您可以使用替换对话框ctrl+h
。
在Search Mode
选择Extended (\n, \r,...
上,然后在{查看内容'查找\r\n
并在“替换”中将其留空(或将其替换为您想要的内容)。< / p>
答案 2 :(得分:0)
我做:
找到:^((?:[^\t]*\t[^\t]*){1,58})[\r\n]+
替换为:$1
如果一行中出现\t
个字符少于59个,这将取代换行符。