【问题标题】:Replacing line breaks, leaving part of capturing group替换换行符,保留部分捕获组
【发布时间】:2021-03-23 18:15:37
【问题描述】:

我对 csv 文件有一些解析问题。显然,每次出现换行符时,Excel 都会将其视为新行,尽管在原始文件中使用了引号:

"1234","so,
I have more requests for this"
"12345","have a nice day"

不确定这是否是正确的方法,但我希望使用(比方说)Sublime 来删除所有没有" 之后的换行符。 为此,我使用了以下正则表达式:\n[^"],替换为捕获组零,以便在上面的示例中:

,
I

将替换为:,I。 不幸的是,捕获组零 ($0) 包括 I 旁边的换行符。

  1. 为什么 Excel 不能正确打开文件?
  2. 我的解决方案中缺少什么?
  3. 我怎样才能使这个替换工作?

谢谢!

【问题讨论】:

  • \n(?!") 并替换为空字符串。如果您将数据导入到 Excel,它应该可以正常打开,但是当您双击时,它并不总是按预期打开。
  • 顺便说一句,像这样的 csv 在我的 Excel 中可以正常打开:单元格 B1 有两行文本。可能是人设有问题? (0x13+0x10 与其中一个?)用正则表达式进行替换可能很复杂。这个换行符可以只在最后一个字段吗?
  • 有趣的@Andrew。我怎样才能知道?
  • 您需要一些编辑器或查看器来告诉您每个字节的确切十六进制值,例如十六进制编辑器。如果您通过在此处输入您发布的内容使用记事本创建一个新的呢?

标签: regex sublimetext3


【解决方案1】:

因此,使用来自 cmets 的 Wiktor Stribiżew 的解决方案:

\n(?!")

在一定程度上让我进步了,但仍然有问题。最终我发现文本中有 +,这让 excel 将其视为一个有时永无止境的公式。一旦我删除它,问题就解决了。

【讨论】:

  • 那么输入可能是无效的csv。 + 没有被引用吗?
  • 原来如此!很奇怪
  • 我做了一些测试,但无法重现该问题,即使引用了一个无效函数,我也确实得到了它。引号只是确保所有内容都属于一个单元格,但是如果您需要将一些奇怪的代码视为字符串,我想您仍然需要使用="your text" 语法。无论如何,如果您需要有关 csv 的进一步帮助,您可能需要使用新发现来更新问题。
猜你喜欢
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2016-07-07
  • 2019-11-05
  • 2011-02-24
  • 1970-01-01
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多