我有一个像这样的文本文件
FieldA FieldB FieldC FieldD FieldE
001 中文 15% 语言
002 法文 20 12% 外文
003 英文 21 外文
004 西班牙语 10% 外文
基本上,我把文件读了进去,分成了几行。现在,我想使用regex将每一行拆分为字段。如您所见,列中的某些字段实际上是空的,这些字段可能不是固定的宽度,而是由至少一个空白分隔。有些字段包含汉字。
我能知道怎么做吗?谢谢。
发布于 2015-08-22 09:52:02
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; // "语言"
所有字段都是可选的。如果一个字段不存在,它将被捕获为空字符串,就像在上面的fieldC
中一样。
发布于 2015-08-22 09:58:23
/\s*(\d*)\s*([^\d\s]*)\s*(\d*)\s\s*(\d*%?)\s*([^\d\s]*)/
这里是一个正则表达式,它将捕获您想要的所有内容,并在每一行上使用它。
\s* //any number of whitespace
(\d*) //any number of digits
\s* //any number of whitespace
([^\d\s]*) //any number of characters that aren't whitespace or digits
\s* //any number of whitespace
(\d*)\s //any number of digits with a space after it
\s* //any number of whitespace
(\d*%?) //any number of digits with an optional %
\s* //any number of whitespace
([^\d\s]*) //any number of characters that aren't whitespace or digits
https://stackoverflow.com/questions/32154581
复制相似问题