匹配选项卡的正则表达式

标签 regex regex-lookarounds

我需要一个通过以下规则匹配制表符的正则表达式:

"—>text"       does not match
"1.—>text"     does not match
"1—>text"      does not match
"A.—>text"     does not match
"text—>text"   match

也就是说,它不应该匹配文本开头的制表符,在列出的项目标记 [A-Z] 或 [0-9] 之后。这是我的表达:

(?<!^((?:\d+|[A-Z])(?:\.)?))\t(?!\1)

https://regex101.com/r/zgJAG9/1

它并不适用于所有情况:

enter image description here

如何解决?

最佳答案

你可以使用

(?<!^(?:(?:\d+|[A-Z])\.?)?)\t

参见 regex demo . 详细信息:

  • (?<!^(?:(?:\d+|[A-Z])\.?)?) - 如果在当前位置的左侧紧邻有
    • ^ - 字符串开始
    • (?:(?:\d+|[A-Z])\.?)? - 一个可选的序列
      • (?:\d+|[A-Z]) - 一位或多位数字或大写 ASCII 字母
      • \.? - 一个可选的 .
  • \t - 制表符。

请注意 (?:\.)?\.?相同.

此外,在负面回顾中捕获组没有什么意义,因为正则表达式处理将在达到反向引用模式之前停止。

关于匹配选项卡的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70259615/

相关文章:

python - 使用Python和正则表达式,如何从html中删除<sup>标签?

c++ - 正则表达式与 C++ 不匹配

ruby - gsub 部分替换

python - 正则表达式 - 匹配一个单词,但不匹配可能出现在短语中任何位置的短语

正则表达式(regexlookarounds)检测不在某些字符串之间的某个字符串(lookahead和lookbehind,单词不被单词包围)

ruby - 正则表达式:匹配不在字符串开头或结尾的所有连字符或下划线

java - Java 中的替换单词

javascript - JS : How to match one capture group multiple times in the same string?

parsing - 为什么最多向前查看 1 个输入标记?

java - 正则表达式匹配不在 <a> 标签内的短语