查找并替换MediaWiki模板的参数

时间:2019-06-21 22:35:57

标签: python regex python-regex

我正在创建一个小脚本来替换MediaWiki模板的参数。有两种类型的MediaWiki模板形式。 第一(内联):-

{{Infobox
|name = ABC
|work = ABC
|year = 1021
}}

第二(非内联):-

{{Infobox
|name = CBA
|work = ABC
|year = 1021
}}

现在我想用CBA替换名称。

            param = sheet.cell_value(i + 1, 1)
            value = sheet.cell_value(i + 1, 2)
            template = sheet.cell_value(i + 1, 3)

我在python脚本中有三个变量。

{{1}}

此处模板=信息框,参数=名称,值= CBA

我在Google上进行了一些搜索,发现它将由正则表达式完成。让我们将模板内容存储在text变量中。那么我们如何找到并替换它?

请记住,MediaWiki模板可以采用两种形式(内联或非内联)。并且不应替换其他参数的相同值。

1 个答案:

答案 0 :(得分:0)

我不知道这是否有帮助:

msg = re.sub(r"^(.*name\s*=\s*)[A-Za-z0-9]+(.*)$", r"\1CBA\2", msg, flags=re.S)

说明:

该代码用“(正则表达式匹配组)CBA(正则表达式匹配组)”替换了 msg 中的内容

这是我的测试用例:

import re

pattern = r"name\s*=\s*([A-Za-z0-9]+)"

msg = '{{Infobox|name = ABC |work = ABC |year = 1021 }}'

print(msg)

msg_long = '{{Infobox \
|name = CBA \
|work = ABC \
|year = 1021 \
}}'

msg = re.sub(r"^(.*name\s*=\s*)[A-Za-z0-9]+(.*)$", r"\1CBA\2", msg, flags=re.S)

print(msg)

print(msg_long)

msg_long = re.sub(r"^(.*name\s*=\s*)[A-Za-z0-9]+(.*)$", r"\1CBA\2", msg_long, flags=re.S)

print(msg_long)