正则表达式匹配制表符

3
我需要一个正则表达式,能够按照以下规则匹配制表符:
"—>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

如何修复呢?

1个回答

3

您可以使用

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

请查看正则表达式演示详情如下:

  • (?<!^(?:(?:\d+|[A-Z])\.?)?) - 负回顾后发现如果当前位置的左侧立即是以下内容,则匹配失败:
    • ^ - 字符串开头
    • (?:(?:\d+|[A-Z])\.?)? - 可选序列,由以下内容组成:
      • (?:\d+|[A-Z]) - 一个或多个数字或大写ASCII字母
      • \.? - 一个可选的 .
  • \t - 制表符。

请注意,(?:\.)?\.?的含义相同。

此外,在负回顾后捕获组是没有意义的,因为在到达你的反向引用模式之前,正则表达式处理将会停止。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接