Notepad++ - 删除逗号分隔文件中的第一列

Mik*_*keD 14 text-editing notepad++ regex csv

我有一个很大的CSV文件,需要删除第一列数据。我无法在 Excel 中打开它,因为 Excel 会将列中的某些值转换为科学数字。

我正在使用Notepad++,并且我正在尝试将文件 EXE 中的第一列字符串化,

1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5
Run Code Online (Sandbox Code Playgroud)

看起来像

Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Run Code Online (Sandbox Code Playgroud)

spe*_*akr 14

Notepad++ 的搜索和替换支持正则表达式 (regex),可轻松用于此目的。

使用以下正则表达式进行搜索:

^[^,]+,(.+)
Run Code Online (Sandbox Code Playgroud)

这匹配行的开头后跟尽可能多的字符,而不是逗号后跟逗号后跟该行的其余部分。该行的其余部分被分组为第一个子匹配。

全局替换为:

\1
Run Code Online (Sandbox Code Playgroud)

这表示第一个子匹配(该行的其余部分)。每一行都被第一列和逗号之后的所有内容替换。

在我在单个全局替换中找到上述方法后(并相应地更新了我的回复),我注意到这个回复基本相同,但也对所使用的正则表达式进行了全面的解释。


注意:较短的正则表达式^[^,]+,不能用于使用空字符串进行全局替换,因为 Notepad++ 将替换除最后一列之外的所有列:替换第一列后,第二列(现在是第一列并且与正则表达式完全匹配)将被替换,然后是第三个,依此类推。但是,较短的正则表达式与其他编辑器(例如PSPadvim)完美配合。


Den*_*nis 10

Ctrl+H并执行以下替换:

Find what:          .*?,(.*)
Replace with:       \1
Wrap around:        checked
Regular expression: selected
. matches newline:  unchecked
Run Code Online (Sandbox Code Playgroud)

现在按Alt+A替换所有出现的内容。

这个怎么运作

  • 正则表达式 .*?,(.*)匹配的整行:

    • .*?, 匹配第一个逗号之前的所有内容,包括逗号本身。

      .*表示任意字符出现任意次数,问号使量词惰性,即匹配尽可能少的字符。

    • (.*) 匹配第一个逗号之后的所有内容。

      包围.*在括号其转换成一个子模式,因此在桅杆可在替换字段来访问。

  • \1表示第一个子匹配(匹配(.*))。

    结果,Notepad++ 用第一个逗号后面的所有内容替换该行。


Sri*_*niv 6

在 Windows 中,您可以按如下方式进行。

for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m  >> output.csv
Run Code Online (Sandbox Code Playgroud)

我假设你只有 6 列。如果您有更多列,请尝试在 tokens 字段中使用 * 进行试验。想法取自Windows for command

  • 对于任意数量的列,请使用:`for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv` (2认同)