gpt4 book ai didi

python - 在正则表达式匹配中插入字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:34 26 4
gpt4 key购买 nike

我需要将字符串 Special:MyLanguage/ 插入到 [[ACBDEF]] 这样的字符串中,这样它就变成了 [[Special:MyLanguage/ABCDEF]]

问题是,我需要排除某些不应插入 Special:MyLanguage/ 的匹配项:

  • 已经包含Special:MyLanguage/
  • 的字符串
  • 类别:
  • 文件:
  • 图片:

因此,将 \[\[ 替换为 \[\[Special:MyLanguage/ 很遗憾,这是行不通的。此外,替换 \[\[[^(Special:MyLanguage|File:|Image:|Category:)] 不起作用,因为它包含第一个字符(匹配项是 [ [A)。我已经阅读了很多教程,尝试了 $1\G 之类的东西,但我仍然摸不着头脑。

最佳答案

您可以使用否定前瞻来确保这些子字符串不会在 [[ 之后立即出现:

(\[\[)(?!Special:MyLanguage/|File:|Image:|Category:)(.*?]])

并替换为\1Special:MyLanguage/\2 .查看regex demo .

详情

  • (\[\[) - 第 1 组:[[子串
  • (?!Special:MyLanguage/|File:|Image:|Category:) - [[后面不能跟交替组中列出的任何子字符串
  • (.*?]]) - 第 2 组:除换行符以外的任何 0+ 个字符,尽可能少,后跟 ]] .

Python demo :

import re
rx = r"(\[\[)(?!Special:MyLanguage/|File:|Image:|Category:)(.*?]])"
s = "[[Special:MyLanguage/text]]\n[[File:text]]\n[[Image:text]]\n[[Category:text]]\n[[Text and ]]"
res = re.sub(rx, r"\1Special:MyLanguage/\2", s)
print(res)

输出:

[[Special:MyLanguage/text]]
[[File:text]]
[[Image:text]]
[[Category:text]]
[[Special:MyLanguage/Text and ]]

关于python - 在正则表达式匹配中插入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50337594/

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