Regex 使用正则表达式增加整数值1

Regex 使用正则表达式增加整数值1,regex,Regex,我想增加价值。例如 杰瑞1 杰瑞2 杰瑞3 杰瑞4 我想改变这一点 杰瑞2 杰瑞3 杰瑞4 杰瑞5 如何更改?不要试图滥用正则表达式 根据设计,正则表达式不支持计数。原因很简单:如果您想要这样做,您至少需要一种类型2语言,而处理要比类型3(“常规”)语言复杂得多 有关详细信息,请参阅维基百科: 因此,根据定义,一旦你完全支持计数,它可能不再是一种常规语言 有一些扩展,例如perl扩展正则表达式,确实允许解决这个特殊问题。但本质上,它们不再是正则表达式,而是调用外部函数来完成工作 下面的p

我想增加价值。例如

  • 杰瑞1
  • 杰瑞2
  • 杰瑞3
  • 杰瑞4
我想改变这一点

  • 杰瑞2
  • 杰瑞3
  • 杰瑞4
  • 杰瑞5

如何更改?

不要试图滥用正则表达式

根据设计,正则表达式不支持计数。原因很简单:如果您想要这样做,您至少需要一种类型2语言,而处理要比类型3(“常规”)语言复杂得多

有关详细信息,请参阅维基百科:

因此,根据定义,一旦你完全支持计数,它可能不再是一种常规语言

有一些扩展,例如perl扩展正则表达式,确实允许解决这个特殊问题。但本质上,它们不再是正则表达式,而是调用外部函数来完成工作

下面的perl扩展正则表达式应满足您的要求:

s/(-?\d+)/$1 + 1/eg
但本质上,只有匹配部分是正则表达式,替换是Perl,因此图灵完成。
e
标志指示应该由Perl计算正确的部分,而不是作为regexp替换字符串

当然,您可以在几乎任何其他正则表达式引擎中执行此操作。匹配,然后计算增量,然后用新值替换匹配

完整的perl筛选器演示:

> echo 'Test 123 test 0 Banana9 -17 3 route66' | perl -pe 's/(-?\d+)/$1+1/eg'
Test 124 test 1 Banana10 -16 4 route67
p
标志使perl读取标准输入并将程序应用于每一行,然后输出结果。这就是为什么实际脚本只包含替换。这就是为什么Perl在unix脚本中如此流行的原因。您甚至可以将此过滤器批量应用于一整套文件(请参见
-i
,了解就地修改,以及
perlrun
手册页面)。因此,为了就地修改一整套文件(备份将用
.bak
进行后期修复):

perl-p-i.bak-e的/(?\d+)/$1+1/eg'

不要试图滥用正则表达式

根据设计,正则表达式不支持计数。原因很简单:如果您想要这样做,您至少需要一种类型2语言,而处理要比类型3(“常规”)语言复杂得多

有关详细信息,请参阅维基百科:

因此,根据定义,一旦你完全支持计数,它可能不再是一种常规语言

有一些扩展,例如perl扩展正则表达式,确实允许解决这个特殊问题。但本质上,它们不再是正则表达式,而是调用外部函数来完成工作

下面的perl扩展正则表达式应满足您的要求:

s/(-?\d+)/$1 + 1/eg
但本质上,只有匹配部分是正则表达式,替换是Perl,因此图灵完成。
e
标志指示应该由Perl计算正确的部分,而不是作为regexp替换字符串

当然,您可以在几乎任何其他正则表达式引擎中执行此操作。匹配,然后计算增量,然后用新值替换匹配

完整的perl筛选器演示:

> echo 'Test 123 test 0 Banana9 -17 3 route66' | perl -pe 's/(-?\d+)/$1+1/eg'
Test 124 test 1 Banana10 -16 4 route67
p
标志使perl读取标准输入并将程序应用于每一行,然后输出结果。这就是为什么实际脚本只包含替换。这就是为什么Perl在unix脚本中如此流行的原因。您甚至可以将此过滤器批量应用于一整套文件(请参见
-i
,了解就地修改,以及
perlrun
手册页面)。因此,为了就地修改一整套文件(备份将用
.bak
进行后期修复):

perl-p-i.bak-e的/(?\d+)/$1+1/eg'

谢谢你所做的一切。我喜欢这样。谢谢你所做的一切。我喜欢这样。迭代每一行,提取数字,用一递增。为什么要使用正则表达式?遍历每一行,提取数字,用一递增。为什么要使用正则表达式?