正则表达式 - 在特定位置提取字符串

时间:2015-07-14 01:58:08

标签: regex

我有一个巨大的固定宽度字符串,如下所示:

B100000DA3F19C                                     Android                                                                                              600             AND                                                2011-08-29 15:03:21.537
352a0D21ffd800000a3a95911801700e                   iPad                                                                                                 600             iOS                                                2011-08-29 19:35:12.753
.
.
.

我需要提取第一部分(id)和第四部分(设备类型 - “AND”或“iOS”)。第一列从0开始,到第51个位置结束所有行。第四部分从168开始,到所有线路结束时为171。每行的长度为244个字符。如果这很复杂,另一个选项是删除此文件中除id和设备类型之外的所有内容。这个单个文件有大约800K记录,测量为180mb,但Notepad ++似乎正在处理它。

我尝试过做一个SQL Server导入数据但是即使预览看起来很好,当数据插入到表中时,它也不准确。

到目前为止,我有以下内容,它给了我前51个字符 -

^(.{51}).*

如果我能保留id和设备类型并删除其余的正则表达式,那将是很棒的。

1 个答案:

答案 0 :(得分:3)

如果你确定它始终处于那个位置,那么这是一个非常简单的方法:

^(.{51}).{117}(.{3})

括号是捕获(你得到的结果),括号是计数器。

编辑:使用以下内容明确丢弃该行的其余部分:

^(.{51}).{117}(.{3}).*$