搜索隐藏序列之外,但保留原有行数

2024-05-16 10:57:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含如下行列表的文件:

-apple
banana tomato
-orange
maracuja
cucumber <hide>
peanut
-apple
apricot
grapefruit </hide> banana
lime
-grape
lemon

我想找到所有以-为前缀的行,并将它们写入dict,如下所示:{original_line_number: '-apple', ...},但排除<hide></hide>段中的行。这看起来很简单,但在我的实际用例中,我得到了多个非常复杂的<hide>序列。对于我在re.compile中准备的每个复杂正则表达式模式,如下所示:

re.compile(r'really complicated regex for 1st hide sequence (' + r'|'.join(some_list_of_possibilities) + r') yeah it still continue%s' % not_enough_complicated_yet)

有没有办法获得带有-前缀的行列表,排除隐藏序列中的行,并仍然索引它们的原始行号?

我已经试过了:

  1. 删除隐藏序列,获取带前缀的-行,与原始列表比较并获取行号:如果内部有一个带前缀的-行,并且隐藏序列外部的同一行与示例中的-apple相同,则失败
  2. 用空格替换隐藏序列中除\n字符以外的所有字符:对我来说失败,因为我找不到如何保留\n字符(不能用空格替换它们)

注意:我想得到前缀为“-”的行,因此如果有像-apple <hide> banana这样的行,我想得到整行内容:/


Tags: 文件reapple列表序列字符hidebanana
2条回答

最后,我通过用空格(或任何其他替代字符)替换隐藏序列中的所有字符(除了换行符)解决了这个问题。这将保留行号并禁用隐藏序列

这对你有用吗

with open(file) as f:
    content = f.readlines()


res = []
skip = False
for index, x in enumerate(content):
    val = x.strip()
    if skip:
        if '</hide>' in val:
            skip = False

    if '<hide>' in val:
        skip = True

    if not skip:
        if val.startswith('-'):
            res.append({index+1: val})

print res

[{1: '-apple'}, {3: '-orange'}, {11: '-grape'}]

相关问题 更多 >