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+ 个字符匹配,并且 ^
/ $
锚点以减少回溯开销。
嘿,我是 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+ 个字符匹配,并且 ^
/ $
锚点以减少回溯开销。