如何使用C#在组中的单词之前匹配所有空格(如果有)?

时间:2019-08-08 14:16:43

标签: c# regex

我想在单词前匹配所有空格(如果有)。

Regex re = new Regex(@"(\d+);([\d\.]+);([\d\.]+);([\w-\(\)\.,\/]+);(\d+);(\d+);([\d,]+);(\d+)", RegexOptions.Compiled);

以上正则表达式适用于示例1,但不适用于示例2。 我需要在哪里更改Example-2的正则表达式?

Example-1:
44;52.93; 8.24;GROSSENKNETEN;201902;28;408.7;28;509.86
71;48.22; 8.98;ALBSTADT-BADKAP;201902;28;475.3;28;-999.9
73;48.62;13.05;ALDERSBACH-KRIESTORF;201902;28;519.8;28;561.76
Example-2:
00044;52.93; 8.24;            GROSSENKNETEN;201907;31; 53.4;9; 28.6
00071;48.22; 8.98;          ALBSTADT-BADKAP;201907;31; 49.0;8;-999.9
00073;48.62;13.05;     ALDERSBACH-KRIESTORF;201907;31;  0.0;0; 15.7

1 个答案:

答案 0 :(得分:1)

如果您可以正常使用C#的全部功能,只需逐行读取文件并用;分割即可获得所有字段。

如果您使用的是基于.NET正则表达式的工具,并且需要从文本行中提取特定数据,则可以使用

(?m)^(\d+);\s*([\d.]+);\s*([\d.]+);\s*([\w-().,\/]+);\s*(\d+);\s*(\d+);\s*([\d.]+);\s*(\d+);\s*([-+]?\d*\.?\d+)\r?$

请参见regex demo

在多行模式下,.NET正则表达式中的$在CR之前不匹配,这就是为什么存在\r?的原因。

模式详细信息

  • (?m)-启用多行模式
  • ^-一行的开头
  • (\d+)-第1组:一个或多个数字
  • ;-分号
  • \s*-超过0个空格
  • ([\d.]+)-第2组:1个以上的数字或点
  • ;\s*([\d.]+);\s*-;,0 +空格,组3:1 +数字/点,;,0 +空格
  • ([\w-().,/]+)-第4组:1个以上的单词,-().,,{{1} }字符
  • /-;\s*(\d+);\s*(\d+);\s*,0 +空格,组5:1+个数字,;,0 +空格,组6:1 +数字,;,0 +空格
  • ;-第7组:1个以上的数字/点
  • ([\d.]+)-;\s*(\d+),0+个空格,第8组:1个以上数字
  • ;-;\s*和0+空格
  • ;-第9组:([-+]?\d*\.?\d+)-(可选),然后是0+位数字,可选的+,1+位数字
  • .-可选的CR字符和行尾。