一定数量的标签后的正则表达式匹配特定值

Demo 阅读:200 2025-06-02 22:19:02 评论:0

在制表符分隔的文本文件中,我只想匹配第 24 个制表符之后包含“1”值的行。
现在,我的正则表达式似乎与我想要的匹配,但当行不匹配时中断。
你能帮我改进一下吗?

我的正则表达式:

/(?:.+?\t){24}1/   

示例输入:

INT E_63    0   0   u   Le  Le  DET:ART DET le  ??  ADJ SENT DET:ART NOM ADV    SENT DET NOM    1   ??  ??  ??  ??  ??  0   0   0   0   0   1   ??  ??  ??  ??  ??  ??   
INT E_63    0   0   u   Le  Le  DET:ART DET le  ??  ADJ SENT DET:ART NOM ADV    SENT DET NOM    1   ??  ??  ??  ??  ??  0   0   0   0   0   0   ??  ??  ??  ??  ??  ??   

(第一行应该匹配,第二行不匹配。)

请您参考如下方法:

当由于 catastrophic backtracking 而没有匹配项时,您的正则表达式将不起作用。作为 . 也匹配制表符。再加上嵌套量词组后有更多子模式,并且缺少 ^ anchor ,灾难性的回溯迫在眉睫。

你需要的是一个否定字符类 [^\t] 并将模式锚定在字符串的开头:

/^(?:[^\t]*\t){24}1/ 

参见 regex demo .

注意:要将 1 匹配为整个单词,您可以考虑在其后添加 \b,或者先行 (?!\S).

详细信息:

  • ^ - 字符串的开始
  • (?:[^\t]*\t){24} - 24 个序列
    • [^\t]* - 制表符以外的 0+ 个字符
    • \t - 制表符
  • 1 - 1 字符。


声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号