[英]Python sed regex matching
我试图在我的Python脚本中使用re.sub()删除一些字符串。
我使用的sed
命令是(在Linux上):
echo "helloworld-5b5cf484-g582f" | sed 's/-[a-z0-9]\\{5\\}$//' | sed 's/-[0-9]\\{10\\}$//' | sed 's/-[a-z0-9]\\{8,10\\}$//'
这将输出helloworld
。
现在,使用Python,我尝试为第一个sed
组执行此操作:
newstring = re.sub(r'(s/-[a-z0-9]\\{5\\}$//)', r'\\1', 'helloworld-5b5cf484-g582f')
但它仅输出副本,即helloworld-5b5cf484-g582f
我该如何执行sed
命令?
编辑:
我的问题不是关于我的正则表达式。 输入String比我作为示例呈现的字符串更复杂。 问题是关于如何正确使用re.sub()和我使用的正则表达式:)
sed
s/-[a-z0-9]\\{5\\}$//
命令被翻译为re.sub(r'-[a-z0-9]{5}$', '', s)
。
注意:
\\{5\\}
=> {5}
s/<pattern>/<repl>/
表示将<pattern>
替换为<repl>
,并且等于re.sub('<pattern>', '<repl>', s, 1)
(因为没有g
sed命令中的修饰符,将1
传递给re.sub
以仅替换一个(首先出现)。 修饰符在re.sub
作为选项或标志传递,例如re.sub(r'-[a-z0-9]{5}$', '', s, flags=re.I)
( re.I
是不区分大小写的修饰符)。 注意,没有必要使用g
修饰符,因为re.sub
默认替换所有出现的内容。
您可以在Python re
文档中了解有关Python regex语法的更多信息。
您的正则表达式与您要执行的操作不匹配。
实际上,您的代码是用'helloworld-5b5cf484-g582f'中的第一个匹配项(或类似的内容)替换以连字符开头的5个字符长的字母数字字符字符串。
因为您的字符串不是以连字符开头,所以不会发生这种情况。
如果我是正确的话,您想用空字符串替换任何以连字符开头的5个字符或8个字符长的小写字母数字字符串。
这可以通过以下代码实现:
码 newstring = re.sub("(-[a-z0-9]{8})?(-[a-z0-9]{5})?", '', 'helloworld-5b5cf484-g582f')
结果
print newstring helloworld
这是重新模块文档的指针:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.