【问题标题】:Pandas DF and RE - Find a match Y. Then find the last occurence of XPandas DF 和 RE - 找到匹配 Y。然后找到 X 的最后一次出现
【发布时间】:2015-10-11 03:08:02
【问题描述】:

我的数据如下所示:

    /media/info/DRIVE/Animal/Stuff
    Rights: _RWCEMF_     User / Group .CN=Dog.OU=Random.OU=Place.O=X.T=X.
    Rights: _RWCEMF_     User / Group .CN=Cat.OU=Random.OU=Place.O=X.T=X.
    /media/info/DRIVE/Tricks/Treats
    Rights: _RWCEMF_     User / Group .CN=Gorilla.OU=Random.OU=Place.O=X.T=X.
    Rights: _RWCEMF_     User / Group .CN=Hippo.OU=Random.OU=Place.O=X.T=X.
    Rights: _R______     User / Group .CN=Dog.OU=Random.OU=Place.O=X.T=X.
    /media/info/DRIVE/Private/Hideout
    Rights: _RWCEMF_     User / Group .CN=Hippo.OU=Random.OU=Place.O=X.T=X.

假设这持续了数千行,我想查看 Dog 拥有的所有权限。理想情况下,输出应如下所示:

    /DRIVE/Animal/Stuff   Rights: _RWCEMF_
    /DRIVE/Tricks/Treats  Rights: _R______

问题:这是我应该用正则表达式解决的问题吗?我一直在做一些阅读/试验,您似乎找不到 Dog,然后回溯最近出现的 /media/info/DRIVE,因为回溯检查静态字符数量。

另一方面,前瞻会找到第一个匹配项,然后继续寻找第二个匹配项 - 即使那是在完全独立的驱动器中的数百行之后。

关于如何解决这个问题的任何想法?我正在用这个旋转我的轮子。所有搜索都指向正则表达式。

【问题讨论】:

    标签: python regex pandas dataframe


    【解决方案1】:

    您可以获取使用此正则表达式获得的字符串的前 8 个字符:

    _.*Dog
    

    这将为您提供以 Dog 权限开头的所有字符串。

    或者如果_不是前置条件,可以寻找这样得到的字符串的子串(2-9):

    :.*Dog
    

    【讨论】:

      【解决方案2】:

      给你:

      import pandas as pd
      
      data = []
      for line in open('temp.text'):
          if line.startswith('/media/'):
              path = line[:-1]
          else:
              rights = line.split()[1]
              owner = re.match('.*.CN=([^.]+).*', line).groups()[0]
              row = {'path': path, 'right': rights, 'owner': owner}
              data.append(row)
      df = pd.DataFrame(data)
      df[df.owner=='Dog']
      

      【讨论】:

      • 这太棒了。我想太多了-实际上这更好,因为我可以继续引用 df 来获取其他用户的权限,而无需再次经历整个过程。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2013-11-03
      • 1970-01-01
      • 2020-02-16
      • 2019-05-07
      • 1970-01-01
      • 2018-07-28
      相关资源
      最近更新 更多