gpt4 book ai didi

python - 双花括号之间 : replace particular text

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:33 25 4
gpt4 key购买 nike

我有一个字符串 (Python 2.7.3),它在 Django 中呈现为模板,但我认为这不是 Django 特有的。该字符串来自 docx 文件中的 document.xml 文件。我正在提取呈现它的文档 xml,并将其放回 docx 中以用于一些简单的邮件合并类型。

除了我可以使用的模板标签的明显限制之外,其中一个问题是,如果您在 Word 中编辑文本,Word 喜欢放入一大堆 xml。

为了我的需要,如果我能的话我会成功

  1. 找到所有出现的"在双花括号之间并用引号替换 " .

我想替换 ""在类似下面的内容中:

word_docxml = 'some text here {{form.letterdate|date:"Y-m-d"}} and more text'

我正在阅读这些内容:

但无法将其组合在一起。

  1. 如何删除/剥离内部的所有内容,包括 < >{{ }}之间像下面这样一团糟:

    <w:rPr>
    <w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/>
    <w:color w:val="00000A"/>
    <w:sz w:val="22"/>
    <w:szCs w:val="22"/>
    <w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/>
    </w:rPr>
    <w:t>{{form.</w:t>undefined</w:r>undefined<w:r>
    <w:rPr>
    <w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/>
    <w:b w:val="false"/>
    <w:bCs w:val="false"/>
    <w:color w:val="00000A"/>
    <w:sz w:val="22"/>
    <w:szCs w:val="22"/>
    <w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/>
    </w:rPr>
    <w:t>L</w:t>undefined</w:r>undefined<w:r>
    <w:rPr>
    <w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/>
    <w:color w:val="00000A"/>
    <w:sz w:val="22"/>
    <w:szCs w:val="22"/>
    <w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/>
    </w:rPr>
    <w:t>etterDate.value|date:"Y-m-d"}}</w:t>undefined</w:r>

这会导致以下结果(抱歉,我似乎无法突出显示感兴趣的区域):

<w:rPr>
<w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/>
<w:color w:val="00000A"/>
<w:sz w:val="22"/>
<w:szCs w:val="22"/>
<w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/>
</w:rPr>
<w:t>{{form.LetterDate.value|date:"Y-m-d"}}</w:t>undefined</w:r>

如何处理这个问题?正则表达式是要走的路吗?如果是这样,如何将命令放在一起?

这不是 Between double curly braces: replace particular text 的副本因为它没有提到处理搜索范围开始和结束的双花括号(这是我真正的问题,我已经阅读了很多示例并且无法正确格式化替换模式)。另一篇文章是关于在 XHTML 中解析 html 实体的子集;我的帖子中没有要求、提及或质疑 XHTML 解析。这篇文章询问如何删除和/或替换两个其他已知开始/结束模式之间的重复模式。我提供了一个简短的背景,两个具体的例子,从简单到复杂,希望学习如何完成我当前的任务——我最大的希望是让 A 部分得到解释,并将该方法自己应用到 B 部分。我得到了聪明的讨论和 super 回复来自社区的乐于助人的成员。我的帖子根本不涉及 HTML,因为我在 Django 中呈现的模板被添加回 docx 存档并保存到文件存储中。它不是重复项(无论如何都是标记的重复项)。

最佳答案

是的,正则表达式非常适合这个!

a) 使用这个:

 re.sub(r"(\{\{[^}]+}\})", lambda m: re.sub("&quot;", '"', m.group(1)), word_docxml)

结果:

>>> word_docxml = 'some text here {{form.letterdate|date:&quot;Y-m-d&quot;}} and &quot; more text'
>>> re.sub(r"(\{\{[^}]+}\})", lambda m: re.sub("&quot;", '"', m.group(1)), word_docxml)
'some text here {{form.letterdate|date:"Y-m-d"}} and &quot; more text'

b)更多相同,只是匹配大括号内不同的内容;

re.sub(r"(\{\{[^}]+}\})", lambda m: re.sub("<[^>]+>", "", m.group(1)), s)

结果:

>>> s = """<w:rPr><w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/><w:color w:val="00000A"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:US" w:eastAsia="en-US" w:bidi="ar-SA"/></w:rPr><w:t>{{form.</w:t></w:r><w:r><w:rPr><w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/><e"/><w:bCs w:val="false"/><w:color w:val="00000A"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/></w:rPr><w:t>L</w:t></w<w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/><w:color w:val="00000A"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:val="en-US"-US" w:bidi="ar-SA"/></w:rPr><w:t>etterDate.value|date:"Y-m-d"}}</w:t></w:r>"""
>>> re.sub(r"(\{\{[^}]+}\})", lambda m: re.sub("<[^>]+>", "", m.group(1)), s)
'<w:rPr><w:rFonts w:eastAsia="Times New Roman" w:cs="Arial" w:ascii="Arial" w:hAnsi="Arial"/><w:color w:val="00000A"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:val="en-US" w:eastAsia="en-US" w:bidi="ar-SA"/></w:rPr><w:t>{{form.LetterDate.value|date:"Y-m-d"}}</w:t></w:r>'

解释,因为你要求指导,而不仅仅是答案;

re.sub(r"(\{\{[^}]+}\})", lambda m: re.sub("&quot;", '"', m.group(1)), word_docxml)

它的工作方式是首先匹配一个双括号间隔。 lambda 表达式只获取在该匹配项中找到的组并替换相关内容。

较小的正则表达式解释:

&quot;     # Just matching that, nothing fancy

匹配标签的模式;

<     # Opening of tag
[^>]+ # Followed by 1 or more characters that are not closing tags
> # Followed by a closing tag

关于python - 双花括号之间 : replace particular text,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32039313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com