使用python替换PO文件数据中的msgstr的正则表达式

使用python替换PO文件数据中的msgstr的正则表达式,python,regex,po-file,Python,Regex,Po File,我有列表content=['x','y','z'] .po文件内容: msgid 'abc' msgstr '' msgid 'def' msgstr '' msgid 'ghi' msgstr '' with io.open('file.po, 'r', encoding='utf-8') as pofile: filedata = pofile.read() 我需要如下输出: msgid 'abc' msgstr 'x' msgid 'def' msgstr 'y' ms

我有列表
content=['x','y','z']

.po文件内容:

msgid 'abc'
msgstr ''

msgid 'def'
msgstr ''

msgid 'ghi'
msgstr ''
with io.open('file.po, 'r', encoding='utf-8') as pofile:
    filedata = pofile.read()
我需要如下输出:

msgid 'abc'
msgstr 'x'

msgid 'def'
msgstr 'y'

msgid 'ghi'
msgstr 'z'
编辑:

msgid 'abc'
msgstr ''

msgid 'def'
msgstr ''

msgid 'ghi'
msgstr ''
with io.open('file.po, 'r', encoding='utf-8') as pofile:
    filedata = pofile.read()

因此,filedata具有PO文件的所有内容,该解决方案使用内置的
iter()
函数和
re.sub()
函数:

import re

content = ['x', 'y', 'z']
po_data = '''
msgid 'abc'
msgstr ''

msgid 'def'
msgstr ''

msgid 'ghi'
msgstr ''
'''

content_it = iter(content)    # constructing iterator object from iterable
result = re.sub(r'(msgstr )\'\'', lambda m: "%s'%s'" % (m.group(1), next(content_it)), po_data)

print(result)
输出:

msgid 'abc'
msgstr 'x'

msgid 'def'
msgstr 'y'

msgid 'ghi'
msgstr 'z'

可能需要更多地解释数据之间的关系。您希望根据顺序编写条目,或者“abc”和“x”之间是否存在某种关系,例如。无论如何,如果您想要订购(而不是正则表达式),这里是:

在位编辑、更改文件(确保保存文件副本)


通过一个步骤是不可能的,您需要一个循环。我将PO文件数据放入var中,需要替换该var中的内容,但我不知道如何使用python替换确切位置的数据re@revo告诉我如何实现用循环替换或将数据放入PO文件内容?@NeErAjKuMaR这是一个字符串吗?查找所有匹配项的数目。在该文件上实现for循环以限制迭代次数,并在内部执行
re.sub
。fh是作为单个字符进行迭代的,而不是作为一条直线。我需要覆盖同一文件上的内容,而不是新文件上的内容。我有一些不同语言的字符串,例如:阿拉伯语,它们会导致错误。独角兽。