【问题标题】:Perl regexp partial replacementPerl 正则表达式部分替换
【发布时间】:2013-09-27 00:37:26
【问题描述】:

我想替换字符串中某个数字的所有实例,但前提是该数字位于以空格分隔的第 n 列中。

这是我目前所拥有的:

$_ =~ s/\s+([^\s]+\s+){$numcols}$i(.*)\n/$rep/;

基本上会有几个空格,然后会有:(非空格(列)后跟空格)为 $numcols 次。然后,会有$i,其中$i 是我要替换的数字,后跟一些我不关心的字符和一个换行符。但是,我不想用 $rep 替换 ALL OF THAT,而只想替换 $i。我该怎么做?

【问题讨论】:

  • 我认为在空间上拆分并替换结果数组的第 n 个元素可能更容易。
  • 问题是我要重新打印,而且我事先不知道每列之间需要添加多少空格
  • 请注意,您不需要指定$_ =~。这是默认设置。这就是$_ 存在的原因。 $_ 是“它”变量。只需s/.../..../

标签: regex string perl replace


【解决方案1】:

类似这样的:

$_ =~ s/^(\s+(?:[^\s]+\s+){$numcols})$i/$1$rep/;

我们将$i 之前的所有内容作为一个组捕获(其中一个非捕获组由?: 表示)。我们保留了所有这些,只替换 $i,而保留字符串的其余部分。

【讨论】:

  • 太好了,谢谢。然而,我意识到我实际上做错了什么。我需要用 rep 替换第 0 列到 $i 的 numcols 中的每个实例,而在我只是替换 numcolsth 实例之前。另外,只是想知道,为什么这会起作用?:非捕获组不会对第一个 \s+ 采取行动?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2018-10-20
  • 1970-01-01
相关资源
最近更新 更多