【发布时间】:2015-04-08 13:54:36
【问题描述】:
我尝试了大约 2 个小时,我不确定我想做的事情是否有效。
我有一个大文件,其中包含一些看起来像这样的数据
43034452 LONGSHIRTPAIETTE 17.30
27.90
0110
COLOR : : : : :
: : :
-11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
43034453 LONG SHIRT PAI ETTE 16.40
25.90
0110
COLOR : : : : :
: : :
-3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
43034454 BASIC 4.99
8.90
0110
COLOR : : : : :
: : :
-5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(该文件有 36k 行。)
我想做的就是把这一切弄干净。
最后,行应该是这样的
43034452;LONGSHIRTPAIETTE;17.30;27.90;0110
43034453;LONG SHIRT PAI ETTE;16.40;25.90;0110
43034454;BASIC;4.99;8.90;0110
所以有很多我不需要的数据。我正在使用 Notepad++ 来做我的正则表达式。
我的正则表达式字符串现在看起来像 ([0-9]*)\s{6,}([A-Z]*)\s*([0-9\.]*)\s*([0-9\.]*)\s*([0-9]*)。
这给我带来了第一个数字,后跟 6 个空格。 (它必须是这样的,因为有些行以FF 和FF 开头不是字母。这是某种我无法识别的标志,但如果我让记事本++ 显示所有标志,我会看到FF。)
所以我得到了
\1: 43034452
\2: LONGSHIRTPAIETTE
\3: 17.30
\4: 27.90
\5: 0110
如预期的那样,但在下一行它停在空间上。如果我将\s 添加到模式中,那么它还会选择单词部分之后的所有空格。而且我显然不能说“只有一个空格”,可以吗?
所以我的问题是,我可以使用正则表达式来获得我想要的选择吗?
如果是这样,我做错了什么?
【问题讨论】:
标签: regex