正则表达式用于标识数字前面或后面跟着的字符

时间:2011-12-13 19:00:05

标签: regex perl

我的文字偶尔会将lI替换为1(来自OCR)。我想将它们转换为1,当它们是数字的一部分时,如果它们独立则不管它们。 “数字的一部分”是指与另一个数字或lI相邻。所以我想将1I3更改为113,但只留下1 I 3

这就是我正在做的事情:

$var =~ s/[lI](?=[lI\d])/1/g;
$var =~ s/(?<=[lI\d])[lI]/1/g;

有一种更优雅的方法可以一步完成吗?换句话说,正则表达式匹配的[Il] 之后是[lI\d] 后跟[lI\d]

2 个答案:

答案 0 :(得分:6)

您可以使用alternation metacharacter |

$var =~ s/(?<=[lI\d])[lI]|[lI](?=[lI\d])/1/g;

可怜的金正日11,但是。

答案 1 :(得分:5)

您希望llla转换为111a吗?因为你的正则表达式也进行了转换。您尝试解决的问题本质上是无上下文的(您可以在[Il]的流之间或之间嵌入一个数字,然后才会将它们转换为1)。如果我是你,我会写一个循环。如果我错过了什么,请纠正我。