【问题标题】:How to remove columns CSV Notepad++ / RegEx?如何删除列 CSV Notepad++ / RegEx?
【发布时间】:2016-08-31 16:42:06
【问题描述】:
a,b,c,d
aaa,2.15,100.15,-
bbb,3.16,215.16,-
ccc,4.10,365.18,-

我要删除

2.15,
3.16,
4.10,

,-
,-
,-

我想删除列 b + d

img1

img2


,[\w].*,[\w].

【问题讨论】:

  • 我不确定您是否可以使用正则表达式来做到这一点,我认为它会替换整个匹配项。如果所有列的宽度相同,您可以使用 Alt + 鼠标选择它。如果没有,我会用 Excel 来做。
  • 请格式化帖子以便阅读。使用可用的降价。发布一个示例,说明您希望 CSV 前后的样子。
  • 你可以试试like this
  • 你说的是行,但它们是列。

标签: regex csv notepad++


【解决方案1】:

只捕获除两列之外的所有内容。
编辑:添加了 \r\n 所以不要跨行

X = 在第 1 列之前:= b-1
Y = 在第 2 列之前:= d-1 - X - 1

查找:
(?m)^((?:[^,\r\n]*,){X})[^,\r\n]*,((?:[^,\r\n]*,){Y})[^,\r\n]*(.*)

替换:
$1$2$3

示例 -

X = 2-1 (Col 2) = 1
Y = 4-1 - X - 1 (Col 4) = 1

正则表达式:(?m)^((?:[^,\r\n]*,){1})[^,\r\n]*,((?:[^,\r\n]*,){1})[^,\r\n]*(.*)


或者,如果这是一个一次性的事情,使用

(?m)^([^,\r\n]*,)[^,\r\n]*,([^,\r\n]*).*

替换$1$2

这只是消除了第 2 列和第 4 列。

【讨论】:

  • 你确定这行得通吗?我无法让它在 regex101 或 Notepad++ 中工作。它不匹配任何内容。
  • @sln 谢谢非常感谢您的帮助^^
  • 哦,我只是(大部分时间)发布测试中有效的东西。什么特别不起作用@Andrew,如果可以的话,发布一个链接。我使用自己的离线测试仪/分析仪。
  • @Andrew - 输入不正确,试试这里:regex101.com/r/rP4xM2/2 或这里:regex101.com/r/rP4xM2/3
  • 但这不是moon90发布的源输入,也不是他期望的输出。
【解决方案2】:

记事本++解决方案:

  • 查找内容:^(.*?),.*?,(.*?),.*$
  • 替换为:$1,$2
  • 搜索模式:正则表达式(不带. matches newline

正则表达式会将第一列和第三列放入捕获组。
在替换中使用了哪些。

【讨论】:

  • 谢谢非常感谢您的帮助^^
【解决方案3】:

只要搜索这个:

(\w+),\d+\.?\d*,(\d+\.?\d*),-

并替换为:

$1,$2

最终结果:

a,b,c,d
aaa,100.15
bbb,215.16
ccc,365.18

它支持带或不带小数的数字,任意位数。如果第一列有特殊字符,您可能需要修改它。

【讨论】:

  • 那说明你帮了我,哈哈。如果对您有帮助,您应该将某些答案标记为已接受。如果要验证数据是否符合预期格式,请使用此正则表达式。如果只关心列数,可以使用 LukStorms'。
  • 对不起:感谢您帮助我 :)
  • 但是你使用了 sln 的选项并且它有效吗?你的输入值对我不起作用。
  • 是的,它起作用了。所有代码都有效.. 好^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-07
  • 2013-05-25
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
相关资源
最近更新 更多