我想在单词前匹配所有空格(如果有)。
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
答案 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字符和行尾。