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

RegEx not processing all lines in a 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%

为什么表达式对某些条目起作用而对其他条目不起作用,我不知道?提前感谢您的帮助!

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

处理文件的最佳方法是将其拆分成行,然后用制表符拆分每一行。当然,强烈推荐 CSV 解析器。

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