RegEx不处理制表符分隔文本中的所有行

时间:2016-05-20 12:21:57

标签: regex lines tab-delimited-text

嘿,我对RegEx完全不熟悉,也许有人可以帮我解决这个问题?

https://regex101.com/r/mS2oB5/4

我的正则表达式

(\w.+?)\t(\w.+?)\t(\w.+?)\t(\d)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+?)\t(\w.+)

文本文件(制表符分隔)

C-380_TF-4318-028   none    ID  4   none    none    1.1 c   1.4 none    none    26  RB 2,5%
C-366_TF-4269-012   none    REW 7   none    none    1.1 c   17.1    none    none    28  RB 7%
C-1008_TF-4480-011  none    none    0   WT  H   1.1 c   17.16   none    none    24  R
C-1008_TF-4480-006  none    none    0   WT  H   1.1 c   2   none    none    36  R
C-388_TF-4351-022   none    none    0   WM  none    1.1 c   20.3    none    none    21  R
C-388_TF-4351-019   none    none    0   WM  none    1.1 c   22.3    none    none    32  R
C-397_TF-4437-001   none    REW 7   WM  none    1.1 c   26  none    none    30  RB 7,5%
C-388_TF-4351-013   none    none    0   WM  none    1.3 b   17.3    none    none    14  RB
C-366_TF-4269-004   none    none    0   none    none    2.1 17  none    none    n.d.    R 
C-1008_TF-4480-013  none    REW 7   WT  H   2.1 c   1   none    none    28  RB
C-380_TF-4318-026   none    REW 7   none    none    2.1 c   1.2 none    none    28  RB 2,5%
C-380_TF-4318-016   none    none    0   none    none    2.1 c   17.1    none    none    28  RB 2,5%
C-380_TF-4318-015   none    none    0   none    none    2.1 c   6.36    none    none    26  RB 10%
C-397_TF-4437-002   none    none    0   WM  none    2.3 c   15.2    none    none    28  RB 5%
C-385_TF-4344-000b  none    ED  23  none    none    2.3 c   2   10.4.3  none    26,5    CO 100%
C-385_TF-4344-000a  none    REW 7   none    none    2.5.1 c 20.2    none    none    30  RB 21%
C-366_TF-4269-022   none    KW  7   none    none    2.5.2 b 17.1    none    none    10  RB 7%

为什么Expression会处理某些条目而不处理其他条目,我不知道?感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

实际问题是,您要求每个项目的长度至少为2个字符\w.+?\w匹配1个字符,.+?匹配至少1个字符。最后\w.+还需要至少2个符号。另外,请注意.\w\d以及\t相匹配,因此,您的正则表达式效率非常低。

处理文件的最佳方法是将其拆分为行,然后使用制表符拆分每行。当然,强烈建议使用CSV解析器。

仅出于教育目的,请参阅this regex,其中每行中的每个项目与[^\t]*匹配 - 除了标签以外的0 +个字符,^ / $锚点,以减少回溯开销。