c#regex解析txt文件中的列

时间:2015-08-22 09:37:49

标签: c# regex

我有一个看起来像这样的文本文件

FieldA    FieldB    FieldC    FieldD  FieldE
  001       中文                15%     语言
  002       法文      20        12%     外文 
  003       英文      21                外文
  004     西班牙语               10%     外文

所以基本上我把文件读入并分成行。现在我想用正则表达式将每一行拆分成字段。如您所见,列中的某些字段实际上是空的,字段可能不是固定宽度,而是由至少一个空格分隔。有些字段包含中文字符。

我可以知道怎么做吗?感谢。

2 个答案:

答案 0 :(得分:1)

// Adding a CancelRequest
func (t *TransportWrapper) CancelRequest(req *http.Request) {
    dt := http.DefaultTransport
    dt.CancelRequest(req)
}

所有字段都是可选的。如果某个字段不存在,则会将其捕获为空字符串,例如上面的string s = "001 中文 15% 语言"; Match m = Regex.Match(s, @"(?<A>\d*)\s*" + // Field A: any number of digits @"(?<B>\p{L}*)\s*" + // Field B: any number of letters @"(?<C>\d*)\s+" + // Field C: any number of digits @"(?<D>(\d+%)?)\s*" + // Field D: one or more digits followed by '%', or nothing @"(?<E>\p{L}*)"); // Field E: any number of letters string fieldA = m.Groups["A"].Value; // "001" string fieldB = m.Groups["B"].Value; // "中文" string fieldC = m.Groups["C"].Value; // "" string fieldD = m.Groups["D"].Value; // "15%" string fieldE = m.Groups["E"].Value; // "语言"

答案 1 :(得分:1)

char buffer[265];// file length is 255, then mkdir and  a space. 

这是一个正则表达式,它将捕获您想要的所有内容,并在每一行上使用它。

/\s*(\d*)\s*([^\d\s]*)\s*(\d*)\s\s*(\d*%?)\s*([^\d\s]*)/