【发布时间】:2019-10-08 19:23:51
【问题描述】:
给定以下字符串:
dpkg.log.looker.test.2019-09-25
我希望能够提取:
looker.test
或
looker.
我一直在尝试多种组合,但没有一种实际上只提取主机名。如果我尝试过滤文件(dpkg.log.)的整个开头,它也会忽略后续字符:/[^dpkg.log].+(?=.[0-9]{4}-[0-9]{2}-[0-9]{2})/
返回:er.test
有没有办法忽略整个字符串“dpkg.log”而不忽略后续重复的字符?
【问题讨论】:
-
s.split('.')[2]?如果您需要looker,应该就足够了。否则,什么是右手边界准则? -
如果您的意思是匹配应该在该日期停止,请尝试
^dpkg\.log\.(.*?)\.\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}$。见this demo。不过这有点冗长。 -
FWIW
[^dpkg.log]只是确保该位置的字符与dgklop.中的任何字符都不匹配(不是字符串dpkg.log- 这意味着任何不在集合中的字符@987654333 @) -
好的,看起来像是两个字符串提取问题之间的经典字符串。使用捕获组并通过
match.group(1)获取值。 -
@Wiktor Stribiżew 给出的答案是准确的。谢谢你。以下正则表达式将匹配“dpkg.log”之后的任何内容。在文件末尾的日期之前:
^dpkg\.log\.(.*?)\.\d{2}(?:\d{2})?-\d{1,2}-\d{1,2}$
标签: python regex regex-negation