c# - 如何跳过一列?

标签 c# regex

我有文本表:

   13.5         0.12557         0.04243         -0.0073         0.00377
     14         0.12573            0.05        -0.00697         0.00437
   14.5         0.12623         0.05823        -0.00703           0.005
     15         0.12853          0.0686        -0.00627         0.00493
   15.5          0.1299         0.08073        -0.00533          0.0063

我想匹配除第一列中的所有数字的位置。 我曾尝试使用负面回顾但没有成功:

(?<!^)[\d.E-]+

如何匹配除第一列(13.5、14、14.5、15、15.5)以外的所有数字?

最佳答案

请注意,如果您不关心数据验证,您可以在此处不使用正则表达式:

var results = line.Split(new[] {"\r", "\n"}, StringSplitOptions.RemoveEmptyEntries)
            .Select(v => v.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries).Skip(1))
            .SelectMany(x => x);
Console.WriteLine(string.Join(",",results));
// => 0.12557,0.04243,-0.0073,0.00377,0.12573,0.05,-0.00697,0.00437,0.12623,0.05823,-0.00703,0.005,0.12853,0.0686,-0.00627,0.00493,0.1299,0.08073,-0.00533,0.0063

如果您只想在数据为数字时匹配那些数字,您可以使用

    var results2 = Regex.Matches(line, @"(?m)(?<!^[\p{Zs}\t]*)(?<=[\p{Zs}\t])-?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?")
            .Cast<Match>()
            .Select(m => m.Value);

参见 C# demo .

-?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)? float /整数正则表达式是 explained here .

图案细节

  • (?m) - 一个多行修饰符,使 ^匹配行首
  • (?<!^[\p{Zs}\t]*) - 如果字符串的开头紧跟在当前位置的左侧之后紧跟着 0+ 个水平空白字符,则匹配失败的负后视
  • (?<=[\p{Zs}\t]) - 在
  • 之前需要一个水平空白的正面回顾
  • -?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)? - 整数/ float 正则表达式:
    • -? - 一个可选的 -字符
    • [0-9]* - 0+ 位
    • \.? - 一个可选的 .字符
    • [0-9]+ - 1+ 位数
    • (?:[eE][-+]?[0-9]+)? - 可选序列:
      • [eE] - 一个 eE字符
      • [-+]? - 一个可选的 -+字符
      • [0-9]+ - 1 个以上数字。

关于c# - 如何跳过一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48440856/

相关文章:

c# - 是否有格式表达式可用于在字符串中插入小数点?

python - 如何在Python中获取除某些值之外的排序数组的索引?

java - Java 正则表达式需要进一步的帮助

javascript - 使用正则表达式前瞻匹配特殊字符

r - 用于正则表达式捕获组的 R 函数是什么?

c# - 要静态还是不要静态

c# - 是否有更简单的语法来访问程序集中嵌入的资源?

javascript - 如何从 Blazor C# 代码调用静态 JavaScript 方法

c# - 可以使用 LINQ 组合多个列表吗?

java - 使用正则表达式从数据中获取特定字符串