一定数量的标签后的正则表达式匹配特定值
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.作者投稿可能会经我们编辑修改或补充。



