gpt4 book ai didi

Python 正则表达式否定元字符

转载 作者:太空狗 更新时间:2023-10-30 02:05:52 24 4
gpt4 key购买 nike

Python 元字符否定。

在网上搜索并编写了一些不同的语法后,我没有想法了。

正在尝试重命名一些文件。他们在标题中有一年,例如[2002]。有些没有括号,我想纠正一下。

所以我试图找到一个在我看来类似于 (^[\d4^]) 的正则表达式(我可以更好地编译)因为我想要一组 4 个数字不要用方括号括起来。我使用方括号希望绑定(bind)它,这样我就可以使用类似 [\1] 的东西重命名。

最佳答案

如果您想检查某个模式周围的事物,您可以使用lookaheadlookbehind 断言。这些不构成匹配的一部分,但会说明您希望在其周围找到(或找不到)什么。

因为我们不需要括号,所以我们需要使用否定后视和前视。

负面前瞻看起来像这样 (?!...)如果 ... 匹配不会下一个。同样,负面回顾看起来像这样 (?<!...)如果 ... 则匹配之前不来。

我们的示例稍微复杂一些,因为我们使用了 []它们本身在正则表达式中有意义,所以我们必须用 \ 来转义它们.

所以我们可以建立一个模式如下:

  • [ 的负面回顾- (?<!\[)
  • 四位数字 - \d{4}
  • ] 的否定预测- (?!\])

这为我们提供了以下 Python 代码:

>>> import re
>>> r = re.compile("(?<!\[)\d{4}(?!\])")
>>> r.match(" 2011 ")
>>> r.search(" 2011 ")
<_sre.SRE_Match object at 0x10884de00>
>>> r.search("[2011]")

要重命名,您可以使用 the re.sub functionsub在你的编译模式上运行。要使其正常工作,您需要在年份前后添加一组额外的括号以将其标记为一个组。

此外,在指定您的替代品时,您将该组称为 \1所以你必须逃避 \或使用原始字符串。

>>> r = re.compile("(?<!\[)(\d{4})(?!\])")
>>> name = "2011 - This Year"
>>> r.sub(r"[\1]",name)
'[2011] - This Year'

关于Python 正则表达式否定元字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266052/

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