我的数据如下:
/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______
问题:这是我应该用正则表达式处理的吗?我一直在做一些阅读/试验,看起来你找不到狗,然后回顾最近出现的 / media / info / DRIVE ,因为lookback检查静态字符数量。
另一方面,lookahead找到第一场比赛,然后继续寻找第二场比赛 - 即使后来在一个完全独立的车道中有数百行。
有关如何处理此问题的任何想法?我用这个旋转我的车轮。所有搜索都指向正则表达式。
答案 0 :(得分:1)
你走了:
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']
答案 1 :(得分:0)
您可以获取使用此正则表达式获得的字符串的前8个字符:
_.*Dog
这将为您提供以Dog的权限开头的所有字符串。
或者如果_不是前置条件,你可以查找以这种方式获得的字符串的子串(2-9):
:.*Dog