正则表达式:在找到特定数字模式之前添加数字

时间:2016-03-01 21:27:30

标签: regex

我正在尝试在包含许多EAN的文件中的特定模式之前添加数字9,如下例所示:

7,82897E+11 50 MATCHS DE HOCKEY 39,95   23,97   40  1   0   0
7,82924E+11 EINSTEIN    34,95   20,97   40  1   0   0
15  BEAUX LIVRES & SCIENCE  94,85   56,91   40  3   0   0
7,82101E+11 SCIENCE  COMME VOUS NE L'AVEZ   34,95   20,97   40  1   0   0

我专门搜索以7,87,9开头的EAN(位于数据行的开头),我必须在这些数字之前添加9。

因此,替换后模式将显示为9,78xxx9,79xxx

我使用此正则表达式来查找这些字符串:

\t\t[7][,][8|9]

这两个\t\t让我不会替换该行中第一个之后的数字。

我在考虑这个问题:\t\t[9],[7][8|9]但最后一部分[8|9]无效,正如我所料......我不知道如何只放置找到的数字(8或9)..

希望这是可能的!

感谢您的帮助!非常感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用以下基于正则表达式的替换:

^([ \t]*)7,([89])

并替换为${1}9,7$2(如果是$19,7$2,则为\g<1>9,7\2,Python中为\19,7\2,POSIX为\019,7\2(因为POSIX BRE最多只支持9个反向引用) ,或[ \t]在一些奇怪的正则表达式中。)

如果支持\s,则可以使用[8|9]速记字符类代替8

请参阅regex demo

另请注意,|符合1个符号:9^([ \t]*)。管道角色在character class内失去了特殊含义。

正则表达式分解:

  • 7, - 字符串开头
  • 7, - (第1组)零个或多个空格或制表符
  • ([89]) - 一系列字符8
  • 9 - (第2组)Class MyViewSet(GenericViewSet): def delete(self, request, *args, **kwargs): ... curl -X DELETE "http://127.0.0.1:8000/resouce/"

如果您需要匹配行的开头,您可以使用多行标记或其内联版本或特殊标记。

答案 1 :(得分:0)

您的搜索模式可能是

/^([\t]*)([7][,])([8|9])/

替换可能是:

$19,7$3

这将修改您的样本

7,82897E + 11 50 MATCHS DE HOCKEY 39,95 23,97

为:

9,782897E + 11 50 MATCHS DE HOCKEY 39,95 23,97

它的作用:

a)搜索:

它将搜索分成三个由(..)

标记的组

1)行的开头

2)字符串是否以 7,

开头

3)是否跟着 8 9

在子句中添加字符串9,7并使用$3引用第三组,它会添加8或9.字符串的其余部分保持不变。