【问题标题】:Python REGEX to exclude beggining of string [duplicate]Python REGEX排除字符串的开头[重复]
【发布时间】: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


【解决方案1】:

也许,下面的表达式与re.findall 一起工作正常:

[^.]+\.[^.]+\.(.+)\.\d{2,4}-\d{2}-\d{2}

Demo

测试

import re

regex = r'[^.]+\.[^.]+\.(.+)\.\d{2,4}-\d{2}-\d{2}'
string = '''
dpkg.log.looker.test.2019-09-25
dpkg.log.looker.test1.test2.2019-09-25
'''

print(re.findall(regex, string))

输出

['looker.test', 'looker.test1.test2']

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 2016-03-16
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多