【问题标题】:Regex.Replace to put NONE between comma and remove last multiple commaRegex.Replace 将 NONE 放在逗号之间并删除最后的多个逗号
【发布时间】:2019-03-20 20:42:33
【问题描述】:

我的列具有以下值:

好的,,A,B,INSERV,OOS,,

我想用 Regex.Replace (field,"replace pattern") 得到以下结果,所以如果字符串之间有双逗号,那么在逗号之间放 NONE 并删除最后多个逗号:

OK,NONE,A,B,INSERV,OOS

谢谢, S

【问题讨论】:

  • 我可以去掉多个逗号,但它并不能解决放置 NONE 的问题:Regex.Replace (field,",{{2,}}",",") 所以我需要不同的东西。
  • 看起来你使用的是 C#?为什么不直接使用 field.TrimEnd(',') 来去掉结尾的逗号,而不是使用昂贵的正则表达式?
  • 另外,如果有多个逗号,您是否只需要一个“NONE”条目?
  • 模式替换并不是最好的工具。如果此字符串来自列表或数组,只需从中删除空字符串。如果它确实以字符串开头,则通过在, 上拆分将其转换为列表,然后删除空字符串。

标签: c# regex


【解决方案1】:

您至少需要两次替换调用,一次用于结尾的逗号,一次用于中间的逗号:

var input = 'OK,,,A,B,INSERV,OOS,,';
input = input.replace(/,*$/, ''); // remove trailing commas
input = input.replace(/,(?=,)/g, ',NONE'); // add NONE
console.log(input);

input = 'OK,,,A,B,INSERV,OOS,,';
input = input.replace(/,*$/, ''); // remove trailing commas
input = input.replace(/,{2,}/g, ',NONE,'); // add NONE
console.log(input);

首先,我们应该删除结尾的逗号,以免在此处获得任何“NONE”条目。然后,我们检查逗号,然后是匹配逗号的前瞻断言。即使存在多个逗号,我也使用前瞻来使正则表达式正常工作(参见示例)。

我添加了两种可能的路线,一种在所有逗号之间放置“NONE”,另一种将任意数量的逗号减少为一个“NONE”条目。

C# 语法是

var input = "OK,,,A,B,INSERV,OOS,,";
input = input.TrimEnd(',');
input = Regex.Replace(input, ",(?=,)", ",NONE"); // add NONE
input.Dump();

input = "OK,,,A,B,INSERV,OOS,,";
input = input.TrimEnd(',');
input = Regex.Replace(input, ",{2,}", ",NONE,"); // add NONE
input.Dump();

【讨论】:

  • 感谢 Christoph 的回答,但我如何将您的代码用于 Regex.Replace (field,"replace pattern")
  • 你使用什么编程语言?
  • C# 已集成到应用程序中,我在表达式 Regex.Replace (field,",{{2,}}",",") 中使用了类似的东西
  • 另一个我可以用单个连字符替换多个连字符的示例:Regex.Replace (field_name, "\?{{1,}}","-")
  • 我明白了,谢谢,让我测试你的 C# 更新代码
猜你喜欢
  • 2012-12-03
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多