gpt4 book ai didi

regex - Python3 中带反斜杠的正则表达式

转载 作者:行者123 更新时间:2023-12-02 17:07:41 24 4
gpt4 key购买 nike

我试图用正则表达式匹配一个字符串中的特定子字符串,例如匹配 "\ue04a abc" 中的 "\ue04a"。但似乎有些不对劲。这是我的代码:

m = re.match('\\([ue]+\d+[a-z]+)', "\ue04a abc").

返回的 m 是一个空对象,即使我尝试在模式中使用三个反斜杠。怎么了?

最佳答案

Python 正则表达式中的反斜杠非常棘手。对于常规字符串(单引号或三引号),有两次反斜杠解释:首先,Python 本身解释反斜杠(因此 "\t" 表示单个字符,文字制表符)然后结果是传递给正则表达式引擎,它对任何剩余的反斜杠都有自己的语义。

通常,强烈建议使用 r"\t",因为这会移除 Python 字符串解析方面。这个带有 r 前缀的字符串不经过 Python 的解释——字符串中的每个字符都只代表它自己,包括反斜杠。因此,这个特定示例表示一个长度为 2 的字符串,其中包含文字字符反斜杠 \t

从您的问题中不清楚目标字符串 "\ue04a abc" 是否应该被解释为长度为 5 且包含 Unicode 字符 U+E04A 的字符串(在 Private Use Area 中,又名 PUA,意味着它没有任何特定的标准用途)后跟空格、abc——在这种情况下你会使用像

这样的东西
m = re.match(r'[\ue000-\uf8ff]', "\ue04a abc")

捕获传统 Basic Multilingual Plane 中的任何单个代码点PUA; -- 或者如果你想匹配以两个字符反斜杠 \u 开头,后跟四个十六进制数字的文字字符串:

m = re.match(r'\\u[0-9a-fA-F]{4}', r"\ue04a abc")

前者是 Python(以及大多数 Python 程序员)理解您的问题的方式,但这两种解释都是合理的。

上面显示了如何匹配“神秘序列”“\ue04a”;扩展代码以匹配包含此序列的更长字符串应该不难。

关于regex - Python3 中带反斜杠的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50809381/

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