【问题标题】:Regex for slitting string by pipe skips empty strings通过管道分割字符串的正则表达式跳过空字符串
【发布时间】:2018-07-30 08:39:47
【问题描述】:

这是我的正则表达式:

var separator = '|';
Regex csvSplit = new Regex("(?:^|" + separator + ")(\"(?:[^\"]+|\"\")*\"|[^" + separator + "]+)", RegexOptions.Compiled);
var test = csvSplit.Matches("10734|Vls, p|6||1.5");

如您所见,有一个空记录。

这是我得到的:

我期待索引 3 上有空字符串,但它被跳过了。我做错了什么?

【问题讨论】:

  • 你为什么不从一开始就这样做using the CSV parser
  • .Split(new [] { '|' }, StringSplitOptions.RemoveEmptyEntries) 正则表达式是强制性的吗?或者基本的Split 是engouth
  • @DragandDrop 是强制性的,我不想要一个全新的解决方案,我只是想修改正则表达式。
  • 好的,那你为什么不首先转义分隔符呢? | 是一个特殊的字符,一个交替运算符。你的模式看起来像(?:^||)("(?:[^"]+|"")*"|[^|]+)(?:^||) 真的很可疑,你的意思是(?:^|\|)

标签: c# regex


【解决方案1】:

试试这个正则表达式:

(?:^|(?<=\|))((?:"[^"]*"|[^|])*)(?=\||$)

【讨论】:

猜你喜欢
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 1970-01-01
  • 2014-11-06
相关资源
最近更新 更多