如何在字符串中包含字符串的所有数字子字符串?

时间:2012-11-27 15:59:58

标签: regex perl

我想转换一个字符串,以便所有数字子序列都包含在{ ... }对中。

例如:

input_string = "APPL[E]5XXXX"

output_string = "APPL[E]{5}XXXX"

每个字符串可能包含一个或多个数字,例如BASIC76XXXXX98ZZZZ,输出应为BASIC{76}XXXXX{98}zzzz

不确定这是否可能实现。任何帮助将非常感谢。

2 个答案:

答案 0 :(得分:8)

我认为你正在寻找这样的东西:

$string =~ s/(\d+)/{$1}/g;

这将匹配任何连续的数字,并将其替换为第一个捕获的子串($1 - 与整个匹配重合),并用大括号括起来。 g是为了确保所有匹配项都被替换。

答案 1 :(得分:4)

这肯定是可能的。

你想要一个匹配数字的正则表达式,捕获数字,然后用一组包裹的花括号替换匹配。

my $input = 'APPL[E]5XXXX';
$input =~ s/(\d+)/{$1}/g;
  • \d+匹配数字。
  • ()捕获并存储在$1中。
  • s///是替换正则表达式。
  • 最后,/g最后意味着'全球',也就是说,对所有比赛都这样做。