Python 如何提取引号之间的文本并替换它?

Python 如何提取引号之间的文本并替换它?,python,python-3.x,text,replace,Python,Python 3.x,Text,Replace,我想做的是从一个文件(1.)加载文本,然后用一个输出替换两个引号之间的每个文本段,这取决于输入 整个计划将要做的示例: 输入文件: pet_1=“狗” pet_2=“猫” pet_3=“狗” 输出文件为: pet_1=“第一条狗” pet_2=“第一只猫” pet_3=“第二只狗” 下面是我想做的,但我不知道如何编码: 1.):从文本文件加载文本: (这是我唯一能做的部分): file=open('file.txt','r') string=file.read() file.close()文

我想做的是从一个文件(1.)加载文本,然后用一个输出替换两个引号之间的每个文本段,这取决于输入

整个计划将要做的示例: 输入文件:

pet_1=“狗”
pet_2=“猫”
pet_3=“狗”
输出文件为:

pet_1=“第一条狗”
pet_2=“第一只猫”
pet_3=“第二只狗”
下面是我想做的,但我不知道如何编码:

1.):从文本文件加载文本: (这是我唯一能做的部分):

file=open('file.txt','r')
string=file.read()
file.close()文件
2.):在引号之间提取文本,并将片段放入列表中:

输入:

pet_1=“狗”
pet_2=“猫”
输出为:
[“狗”、“猫”]

3.):修改此列表中的项目:

例如:
[“第一只狗”、“第一只猫”]

4.):再次将文本块放在正确的位置:

例如:

pet_1=“狗”
pet_2=“猫”

我之所以想这样做,是因为我有一个大约4750行的巨大文本文件,我不想手工修改它。我希望您能理解。

不太清楚您想做什么,是否会受到大小写(大写字母)的影响,但您可以尝试:

with open('file.txt', 'r') as f:
    string = f.read()

pet_1 = 'Dog'
pet_2 = 'Cat'

something = input("Input: ") + ' '

string = string.replace(pet_1, (something + pet_1))
string = string.replace(pet_2, (something + pet_2))

如果我理解正确,pet_1和pet_2不会受到影响,变量也不需要“再次放回正确的位置”。

您可以使用带有回调函数的
re.sub
进行“动态”替换,例如,您可以根据要替换的字符串调用函数。有了它,您可以使用字典或集合.defaultdict并根据要替换的动物获取
next
前缀

text = """
pet_1 = "Dog"
pet_2 = "Cat"
pet_3 = "Dog"
"""

import re, collections
count = collections.defaultdict(lambda: iter(["First", "Second", "Third", "Fourth"]))
res = re.sub(r'"([^"]+)"', lambda m: f'"{next(count[m.group(1)])} {m.group(1)}"', text)
之后,
res

pet_1 = "First Dog"
pet_2 = "First Cat"
pet_3 = "Second Dog"
还有一些解释:

  • count
    是一个
    defaultdict
    ,将每个单词/动物映射到诸如“first”、“second”等单词的迭代器
  • re.sub
    将使用正则表达式查找
    “…”
    中的零件,然后使用回调函数导出实际替换
  • 正则表达式
    r'([^“]+)”
    表示“一个引号,然后是一些非引号的字符,然后是另一个引号”
  • lambda
    是回调函数,创建一个格式字符串,该字符串由与该单词相关联(或新创建的)迭代器中的
    next
    前缀和单词本身组成,其中
    m.group(1)
    指在正则表达式中匹配的
    (…)
    中的部分

(显然,
iter([“First”,…])
可能需要使用更多元素来扩展更长的列表,或者只需使用
itertools.count(1)
来获取数字而不是单词。)

帮助你做什么?你能更具体地回答你的问题吗?如果你尝试了不适合你的东西,请与我们分享。另外,你如何从
string=file.read()
pet_1=“Dog”pet_2=“Cat?”“
我假设您要将字符串拆分为一个列表,然后对其中的每个元素执行一个操作,例如,在某个字符串前面加上前缀,然后从那里开始。也许可以创建一份该列表的副本,以便以后可以再次使用,但这只是猜测。这是否回答了您的问题?问题草图中的4项任务中,你真正想问的是哪项?亲爱的tobias_k,谢谢你的回答,请为我写的问题不好道歉。但就目前而言,“真正”的原因是翻译文本片段。我在用python翻译方面没有问题,但遗憾的是,我没有使用re或lambda的经验,所以如果你能写出符合上下文的答案,那就太好了。@ChristianPatzl我不懂。答案不就是你想要的结果吗?或者您想要一个没有
re
lambda
的答案吗?在后一种情况下:这是最好的工具;学会使用它们,不要试图绕过它们。答案很好,但并不完全是我想要的。我试着看了一遍文档,但我就是不明白it@ChristianPatzl那你想要什么?除了添加“第一”、“第二”部分外,“翻译文本”是什么意思?