代码之家  ›  专栏  ›  技术社区  ›  Velaro

Regext look ahead没有按预期工作(正如我所了解的)[duplicate]

  •  0
  • Velaro  · 技术社区  · 5 年前

    我正在创建一个正则表达式来搜索文本,但前提是匹配后没有破折号。我正在为此使用lookahead:

    • 正则表达式: Text[\s\.][0-9]*(?!-)

    Expected result Result --------------- ------- Text 11 Text 11 Text 11 Text 52- <No Match> Text 5

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

    向前看似乎只与前一个角色匹配,这让我有了 Text 5 ,而我需要它完全不返回匹配。

    我正在检查 https://www.regular-expressions.info/ 指导和尝试使用组,但我不能把我的头围绕这个。

    如何使lookback函数影响前面的整个匹配?

    我使用默认的.NetText.regular表达式图书馆。

    0 回复  |  直到 6 年前
        1
  •  3
  •   Wiktor Stribiżew    6 年前

    这个 [0-9]* 回溯并让正则表达式引擎找到匹配项,即使存在 -

    有两种方法:使用原子组或在前瞻中检查数字:

    Text[\s.][0-9]*(?![-\d])
    

    或者

    Text(?>[\s.][0-9]*)(?!-)
    

    看到了吗 regex demo #1 以及 regex demo #2 .

    细节

    • Text[\s.][0-9]*(?![-\d]) 比赛 Text ,然后是一个点或一个空格,然后是0或更多的数字,然后它检查是否有 - \d 展望未来,这些尝试将失败
    • Text(?>[\s.][0-9]*)(?!-) 比赛 ,然后一个原子组开始,在组模式找到匹配的文本后,回溯将不被允许进入。 (?!-) - 之后 [0-9]*