【问题标题】:perl only to find and replace exact matchperl 仅查找和替换完全匹配
【发布时间】:2012-12-06 23:53:39
【问题描述】:

我正在尝试在 perl 中实现替换。 我有一个二进制矩阵,我想替换

0 和 1

1 和 2。

所以我使用了以下行

s/1/2/g foreach @remaining;

但是,此命令最终也替换了我的列名,其中包含数字。例如,它将 1234 转换为 2234。

我希望它只匹配和替换 1 而不是 1234。

【问题讨论】:

  • 也许你应该说一下你的数据,除了它是一个二进制矩阵,例如,它是否存储在一个普通文件中,制表符/逗号分隔等等。

标签: perl pattern-matching replace substitution


【解决方案1】:

使用单词边界,例如:

s/\b1\b/2/g foreach @remaining;

同时替换0和1:

s/\b([01])\b/1+$1/eg foreach @remaining;

【讨论】:

  • 感谢 M42。这是工作。你也可以向我解释一下它是如何工作的吗? \b 的作用是什么?第一个使用\b1,第二个使用\b/2。为什么它们不同?
  • @user1007742 \b1\b2... 不,它们不存在。 :) 转义序列是\b,数字只是数字。 \b 单词边界是一个零宽度断言,它断言它的位置是单词字符和非单词字符之间的边界。
  • @TLP 谢谢,我想我明白了 \bword\b 是完全匹配的。谢谢
  • @TLP:感谢您的评论,我之前无法回复。
猜你喜欢
  • 1970-01-01
  • 2021-09-09
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 2012-06-09
相关资源
最近更新 更多