" , 我用 re.sub("\bhe-6ren">
gpt4 book ai didi

python - 正则表达式在 Python 和 Ruby 中的工作方式不同

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:57 26 4
gpt4 key购买 nike

比如说,我有一个简单的字符串

str = "hello hello hello 123"

在 Python 中,我想替换所有名为 "hello" 的单词与 "<>" , 我用

re.sub("\bhello\b",'<>',str)

在 Ruby 1.8.7 中,我使用

str.gsub!(/\bhello\b/,'<>')

但是,Ruby 解释器按预期工作,正确地更改了所有称为 hello 的词。但是,Python 不会——它甚至无法识别一个名为 hello 的词。

我的问题是:

  • 为什么不同?
  • 如何在 Python 中获得相同的功能?

最佳答案

Python 字符串将反斜杠解释为转义码; \b 是一个退格字符。加倍反斜杠或使用原始字符串文字:

re.sub("\\bhello\\b", '<>', inputstring)

re.sub(r"\bhello\b", '<>', inputstring)

比较:

>>> print "\bhello\b"
hello
>>> print r"\bhello\b"
\bhello\b
>>> len("\bhello\b"), len(r"\bhello\b")
(7, 9)

参见 The Backslash Plague section Python 正则表达式 HOWTO:

As stated earlier, regular expressions use the backslash character ('\') to indicate special forms or to allow special characters to be used without invoking their special meaning. This conflicts with Python’s usage of the same character for the same purpose in string literals.

[...]

The solution is to use Python’s raw string notation for regular expressions; backslashes are not handled in any special way in a string literal prefixed with 'r', so r"\n" is a two-character string containing '\' and 'n', while "\n" is a one-character string containing a newline. Regular expressions will often be written in Python code using this raw string notation.

演示:

>>> import re
>>> inputstring = "hello hello hello 123"
>>> re.sub("\bhello\b", '<>', inputstring)
'hello hello hello 123'
>>> re.sub(r"\bhello\b", '<>', inputstring)
'<> <> <> 123'

关于python - 正则表达式在 Python 和 Ruby 中的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766248/

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