gpt4 book ai didi

python - 正则表达式子问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:06:22 24 4
gpt4 key购买 nike

好吧,我对 re.sub 有一个半奇怪的问题。

采用以下代码:

import re
str_to_be_subbed = r'somefile.exe -i <INPUT>'
some_str = r'C:\foobar'
s = re.sub(r'\<INPUT\>', some_str, str_to_be_subbed)
print s

我认为它会给我:

somefile.exe -i C:\\foobar

但它却给了我:

somefile.exe -i C:♀oobar

我知道\f 是转义字符,但即使我尝试这样做,也应该转义特殊字符。即使我这样做:

print r'%s' % s

它仍然给我这个:

somefile.exe -i C:♀oobar

为什么要这样做?避免这种情况的最佳方法是什么?

忍者编辑:

如果我查看 s 的值,它是:

'somefile.exe -i C:\x0coobar'

为什么\f变成了\x0。呃。

编辑:

还有一个问题,如果我把代码修改成这样:

import re
import os
str_to_be_subbed = r'somefile.exe -i <INPUT>'
some_str = os.path.abspath(r'C:\foobar')
some_str
s = re.sub(r'\<INPUT\>', some_str, str_to_be_subbed)
print s

给我:

>>> import re
>>> import os
>>> str_to_be_subbed = r'somefile.exe -i <INPUT>'
>>> some_str = os.path.abspath(r'C:\foobar')
>>> some_str
'C:\\foobar'
>>> s = re.sub(r'\<INPUT\>', some_str, str_to_be_subbed)
>>> print s
somefile.exe -i C:♀oobar

为什么会这样。由于 os.path.abspath 转义了\'s。为什么 re.sub 仍然搞砸了?

这也是一个非常小的例子,这个小问题只是在一个古老的应用程序中随机出现的。我真的不能去把它改成 string.replace 因为它的设置方式不花一整天。

我真的很好奇为什么要这样做。针对以上问题。

最佳答案

\fform feed 字符。逃避它并且它有效:

some_str = r'C:\\foobar'

另一种解决方案:

s = re.sub(r'<INPUT>', some_str.encode("string_escape"), str_to_be_subbed)

关于python - 正则表达式子问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/897480/

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