我有一个看起来像这样的文本文件
FieldA FieldB FieldC FieldD FieldE
001 中文 15% 语言
002 法文 20 12% 外文
003 英文 21 外文
004 西班牙语 10% 外文
所以基本上我把文件读入并分成行。现在我想用正则表达式将每一行拆分成字段。如您所见,列中的某些字段实际上是空的,字段可能不是固定宽度,而是由至少一个空格分隔。有些字段包含中文字符。
我可以知道怎么做吗?感谢。
答案 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]*)/