3

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

例如:

input_string = "APPL[E]5XXXX"

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

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

不确定这是否可能实现。任何帮助将不胜感激。

4

2 回答 2

9

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

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

这将匹配任何连续的数字并将它们替换为$1被大括号包围的第一个捕获的子字符串( - 与整个匹配一致)。这g是为了确保所有事件都被替换。

于 2012-11-27T16:02:25.240 回答
5

这肯定是可能的。

您需要一个匹配数字的正则表达式,捕获数字,然后用一组包装的花括号替换匹配项。

my $input = 'APPL[E]5XXXX';
$input =~ s/(\d+)/{$1}/g;
  • \d+匹配数字。
  • ()捕获并存储在$1.
  • s///是一个替换正则表达式。
  • 最后,/g最后的意思是“全球”,也就是对所有比赛都这样做。
于 2012-11-27T16:09:14.597 回答