【发布时间】:2015-07-24 02:54:36
【问题描述】:
示例文本:(约翰,36 岁,阿拉巴马州)
我在代码中所做的是首先匹配圆括号 (),然后使用逗号作为分隔符分割内容。
private static IEnumerable<string> GetValues(string value)
{
var matches = Regex.Matches(value, @"\(.*\)");
if (matches.Count == 0) return new string[0];
var valueSplit = matches[0].Value;
var theString = valueSplit.Trim('(', ')');
var wordSplit = theString.Split(',').Select(x=>x.Trim());
return wordSplit;
}
对于示例文本 (John, 36, Alabama) 上面的代码返回:
- 约翰
- 36
- 阿拉巴马州
现在的问题是我应该如何为逗号创建一个转义序列,我已将其用作分隔符。
这样对于示例文本(约翰 36,奥尔顿,阿拉巴马州)返回
- 约翰
- 36
- 阿拉巴马州奥尔顿
并且递归地允许我甚至逃避转义序列本身?我已经尝试过 String.Replace 和 Regex.Replace 但无济于事。
这是Fiddle
【问题讨论】:
-
如果您知道只有一个字段可以包含逗号(并且放在末尾),那么您可以将拆分数限制为预期字段数。
-
两个想法。首先,处理这种情况(CSV 样式)的一种方法是将包含分隔符的字段包含在引号中,以便引号中包含的任何逗号都不是分隔符。处理此问题的另一种方法是选择不是逗号的分隔符。逗号真的不是一个很好的分隔符。你能选择一个不同的定界符,比如“|”吗?
-
@DWright 我绝对同意逗号不是最好的分隔符,但不幸的是我无法对当前设置进行任何更改。除了找到转义分隔符的方法。
标签: c# regex string escaping delimiter