gpt4 book ai didi

regex - 语法错误 : (irb):4: invalid pattern in look-behind (positive look-behind/ahead)

转载 作者:行者123 更新时间:2023-12-04 07:37:50 27 4
gpt4 key购买 nike

我正在尝试编写一个正则表达式替换模式,以便替换散列中的数字,如下所示:
regexr link

some_dict = {
TEST: 123
}
这样就可以捕获和替换 123 个。 (?<= |\t*[a-zA-Z0-9_]+: |\t+)\d+(?=.*)您会看到这在 regexr 中运行良好:
enter image description here
但是,当我在 irb 中运行此 gsub 时,会发生以下情况:
irb(main):005:0> "  TEST: 123".gsub(/(?<= |\t*[a-zA-Z0-9_]+: |\t+)\d+(?=.*)/, "321")
SyntaxError: (irb):5: invalid pattern in look-behind: /(?<= |\t*[a-zA-Z0-9_]+: |\t+)\d+(?=.*)/
我一直在寻找类似的问题,例如 Invalid pattern in look-behind但我确保在我的后视中排除了捕获组,所以我真的不确定问题出在哪里。

最佳答案

原因是 Ruby 的 Onigmo 正则表达式引擎不支持无限宽度的后视模式。
在一般情况下,正面回顾包含像 * 这样的量词。 , +{x,}通常可以用消费模式代替 \K :

/(?: |\t*[a-zA-Z0-9_]+: |\t+)\K\d+(?=.*)/
#^^^ ^^
但是,您甚至不需要那种复杂的模式。 (?=.*)是多余的,因为它不需要任何东西, .*甚至匹配一个空字符串。如果当前位置的左侧有空格或制表符,则会触发正向后视模式。正则表达式等于
.gsub(/(?<=[ \t])\d+/, "321")
模式匹配的地方
  • (?<=[ \t]) - 紧跟空格/制表符的位置
  • \d+ - 一位或多位数字。
  • 关于regex - 语法错误 : (irb):4: invalid pattern in look-behind (positive look-behind/ahead),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67644969/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com