正则表达式在列表中添加括号内的单词

时间:2014-08-16 08:14:45

标签: python regex

我是python和regex的初学者。我有一个清单:[cat,dog,bird,duck] 如果猫在列表中它应该将'动物'添加到现有的宠物()在paranthesis内:宠物(动物) 如果猫和狗在列表中,它应该是:宠物(动物,动物)

文字档案:

My favourite pets
pets()

预期文本文件:

My favourite pets
pets(animal,animal)

编码

import re
list=['cat','dog','bird','cow'] 
with open('te.txt','r+') as f:
    a = [x.rstrip() for x in f]
    if 'cat' in list:
        item='animal'
        add=(r'^pets (.*)', item)
        f.write('pets(' + item)
    if 'dog' in list:
        item='animal'
        add=(r'^pets (.*)', item)
        f.write('pets(' + item)

我坚持这样做,请帮我修改我的代码。将不胜感激!

2 个答案:

答案 0 :(得分:0)

我不知道你为什么要使用正则表达式。您只需阅读文本文件,使用字符串切片删除My favourite petspets()文本,构建列表并将其写回文件。要求正则表达式并不复杂。

这是我想出的一个快速替代方案:

MY_NEW_LIST = ['cat', 'dog', 'bird', 'cow']
ANIMAL_PETS = ['cat', 'dog']
PETS_FILE   =  'animals.txt'

# open the existing file, and get the line with `pets(…)`
with open(PETS_FILE, 'r+') as f:
    existing_animal_str = f.readlines()[1]

# get the list of animals from `pets(…)`
existing_animals = pets_line[5:-1]
list_of_animals  = [i for i in existing_animals.split(',') if len(i) > 0]

# add the new animals to the list
for pet in ANIMAL_PETS:
    if pet in MY_NEW_LIST:
        list_of_animals.append('animal')

# construct a new string to put back into `pets(…)`
final_animal_str = ', '.join(list_of_animals)

# write the new string back to the file
with open(PETS_FILE, 'w+') as f:
    f.write('My favourite pets\npets(%s)' % final_animal_str)

前三行包含一些常量:动物列表,我们向animal行添加pets()的宠物列表,以及文本文件的名称。

作为旁注,您的变量名称可以用于某些工作。由于list是内置函数的名称,add非常通用,因此使用这样的变量名称会导致问题。使用更具体的变量名称。

答案 1 :(得分:0)

听起来像您在文件中找到文字并替换它,您可以使用str.replace并重写它;

文字档案

My favourite pets
pets()

listAnimal = ['cat', 'dog', 'bird', 'cow'] 
with open('te.txt','r+b') as f:
    listsAppendAnimal = []
    text = 'pets('
    if 'cat' in listAnimal:
        listsAppendAnimal.append('animal')
    if 'dog' in listAnimal:
        listsAppendAnimal.append('animal')
    allText = f.read()
    allText = allText.replace('pets()', 'pets(' + ', '.join(listsAppendAnimal) + ')') # or use re python
    f.seek(0)
    f.truncate()
    f.write(allText)
    f.close()

输出文字文件:

My favourite pets
pets(animal,animal)

使用正则表达式;

import re
listAnimal = ['cat', 'dog', 'bird', 'cow'] 
with open('te.txt','r+b') as f:
    listsAppendAnimal = []
    text = 'pets('
    if 'cat' in listAnimal:
        listsAppendAnimal.append('animal')
    if 'dog' in listAnimal:
        listsAppendAnimal.append('animal')
    allText = f.read()
    allText = re.sub(r'pets\(.*?\)', 'pets(' + ', '.join(listsAppendAnimal) + ')', allText)
    f.seek(0)
    f.truncate()
    f.write(allText)
    f.close()

-

此致