我正在尝试在包含许多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,8
或7,9
开头的EAN(位于数据行的开头),我必须在这些数字之前添加9。
因此,替换后模式将显示为9,78xxx
或9,79xxx
。
我使用此正则表达式来查找这些字符串:
\t\t[7][,][8|9]
这两个\t\t
让我不会替换该行中第一个之后的数字。
我在考虑这个问题:\t\t[9],[7][8|9]
但最后一部分[8|9]
无效,正如我所料......我不知道如何只放置找到的数字(8或9)..
希望这是可能的!
感谢您的帮助!非常感谢。
答案 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.字符串的其余部分保持不变。