Python:re.sub 中的 \number 反向引用

发布于 2024-07-29 19:38:43 字数 1432 浏览 7 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

酒解孤独 2024-08-05 19:38:43

您的代码中有两个错误。 首先,您没有匹配(特别是捕获)您认为正在匹配和捕获的内容 - 在调用 .search 之后插入:

>>> _.groups()
('',)

重复的无约束重复(捕获组后的星号)除了星星之外什么都没有)匹配一次太多——在你认为匹配的内容末尾有一个空字符串——这就是被捕获的内容。 通过将至少一颗星星更改为加号来修复,例如:

>>> pat_error = re.compile(r">(\s*\w+)*>")
>>> pat_error.search(text)
<_sre.SRE_Match object at 0x83ba0>
>>> _.groups()
(' the',)

现在,这可以合理地匹配和捕获。 其次,您没有在应该使用的地方使用原始字符串文字语法,因此您认为有反斜杠的地方没有反斜杠——您有一个转义序列 \1 ,它与 chr( 1)。 通过使用原始字符串文字语法进行修复,即在上面的代码片段之后

>>> pat_error.sub(r">\1", text)
'<hi type="italic"> the</hi>'

或者您可以将所有反斜杠加倍,以避免它们被视为转义序列的开头 - 但是,原始字符串文字语法更具可读性。

Two bugs in your code. First, you're not matching (and specifically, capturing) what you think you're matching and capturing -- insert after your call to .search:

>>> _.groups()
('',)

The unconstrained repetition of repetitions (star after a capturing group with nothing but stars) matches once too many -- with the empty string at the end of what you think you're matchin -- and that's what gets captured. Fix by changing at least one of the stars to a plus, e.g., by:

>>> pat_error = re.compile(r">(\s*\w+)*>")
>>> pat_error.search(text)
<_sre.SRE_Match object at 0x83ba0>
>>> _.groups()
(' the',)

Now THIS matches and captures sensibly. Second, youre not using raw string literal syntax where you should, so you don't have a backslash where you think you have one -- you have an escape sequence \1 which is the same as chr(1). Fix by using raw string literal syntax, i.e. after the above snippet

>>> pat_error.sub(r">\1", text)
'<hi type="italic"> the</hi>'

Alternatively you could double up all of your backslashes, to avoid them being taken as the start of escape sequences -- but, raw string literal syntax is much more readable.

寂寞陪衬 2024-08-05 19:38:43
>>> text.replace("><", "<")
'<hi type="italic"> the</hi>'
>>> text.replace("><", "<")
'<hi type="italic"> the</hi>'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文