Python 替换反斜杠'\';串
在Python3中,我有一个普通字符串Python 替换反斜杠'\';串,python,string,python-3.x,Python,String,Python 3.x,在Python3中,我有一个普通字符串“баааачаааааааач。我从外部HTML页面获得这个字符串,因此它没有原始字符串的“r”前缀。我不知道如何将其转换为原始字符串 如何将'\'替换为点'. 我尝试了以下方法: s = get_string() # 'бекслеш \018 на точку' print(s.replace('\\', '.')) out: бекслеш 8 на точку 但我需要“баааачааааачаааа UPD:很明显,编程语言将反斜杠解释为控
“баааачаааааааач。我从外部HTML页面获得这个字符串,因此它没有原始字符串的“r”前缀。我不知道如何将其转换为原始字符串
如何将'\'
替换为点'.
我尝试了以下方法:
s = get_string() # 'бекслеш \018 на точку'
print(s.replace('\\', '.'))
out: бекслеш 8 на точку
但我需要“баааачааааачаааа
UPD:很明显,编程语言将反斜杠解释为控制字符。
问题:如果无法将字符串指定为原始字符串,或者不清楚如何将其转换为原始字符串,如何进行替换?字符串文字和原始字符串之间的区别在于它们被解释为从源代码创建字符串对象的方式。它们创建的对象没有任何区别。因此,不存在将字符串转换为原始字符串的情况
在本例中,'\018'
代表'\x01'
,它是头字符的开头,后跟字符'8'
chr(1) + '8' == '\x018' # True
正如您所看到的,您的字符串不包含'\\'
字符
'\\' in 'бекслеш \018 на точку' # False
from unicodedata import category
"".join(".{:02d}".format(ord(char)) if category(char).startswith("C") else char for char in s)
# 'бекслеш .018 на точку'
字符串文字和原始字符串之间的区别在于它们被解释为从源代码创建字符串对象的方式。它们创建的对象没有任何区别。因此,不存在将字符串转换为原始字符串的情况
在本例中,'\018'
代表'\x01'
,它是头字符的开头,后跟字符'8'
chr(1) + '8' == '\x018' # True
正如您所看到的,您的字符串不包含'\\'
字符
'\\' in 'бекслеш \018 на точку' # False
from unicodedata import category
"".join(".{:02d}".format(ord(char)) if category(char).startswith("C") else char for char in s)
# 'бекслеш .018 на точку'
我认为您实际上想要替换控制字符:
print(list(s))
# ['б', 'е', 'к', 'с', 'л', 'е', 'ш', ' ', '\x01', '8', ' ', 'н', 'а', ' ', 'т', 'о', 'ч', 'к', 'у']
代码
print(s.replace("\x01", ".01"))
# бекслеш .018 на точку
详细信息
很明显,编程语言将反斜杠解释为控制字符
实际上,控制字符包括转义字符(\
)和相邻的代码(01
)。让我们看看Python如何看待每个角色:
print(list(s))
# ['б', 'е', 'к', 'с', 'л', 'е', 'ш', ' ', '\x01', '8', ' ', 'н', 'а', ' ', 'т', 'о', 'ч', 'к', 'у']
注意\x01
是一个字符,而不仅仅是反斜杠。你必须替换整个角色
'\\' in 'бекслеш \018 на точку' # False
from unicodedata import category
"".join(".{:02d}".format(ord(char)) if category(char).startswith("C") else char for char in s)
# 'бекслеш .018 на точку'
附录
因此,一般的方法是迭代每个字符并用新字符串替换属于的任何字符。此新字符串的格式应与它替换的字符的值一致。否则,返回一个普通字符
'\\' in 'бекслеш \018 на точку' # False
from unicodedata import category
"".join(".{:02d}".format(ord(char)) if category(char).startswith("C") else char for char in s)
# 'бекслеш .018 на точку'
- 另见和
- 另见
我认为您实际上想要替换控制字符:
print(list(s))
# ['б', 'е', 'к', 'с', 'л', 'е', 'ш', ' ', '\x01', '8', ' ', 'н', 'а', ' ', 'т', 'о', 'ч', 'к', 'у']
代码
print(s.replace("\x01", ".01"))
# бекслеш .018 на точку
详细信息
很明显,编程语言将反斜杠解释为控制字符
实际上,控制字符包括转义字符(\
)和相邻的代码(01
)。让我们看看Python如何看待每个角色:
print(list(s))
# ['б', 'е', 'к', 'с', 'л', 'е', 'ш', ' ', '\x01', '8', ' ', 'н', 'а', ' ', 'т', 'о', 'ч', 'к', 'у']
注意\x01
是一个字符,而不仅仅是反斜杠。你必须替换整个角色
'\\' in 'бекслеш \018 на точку' # False
from unicodedata import category
"".join(".{:02d}".format(ord(char)) if category(char).startswith("C") else char for char in s)
# 'бекслеш .018 на точку'
附录
因此,一般的方法是迭代每个字符并用新字符串替换属于的任何字符。此新字符串的格式应与它替换的字符的值一致。否则,返回一个普通字符
'\\' in 'бекслеш \018 на точку' # False
from unicodedata import category
"".join(".{:02d}".format(ord(char)) if category(char).startswith("C") else char for char in s)
# 'бекслеш .018 на точку'
- 另见和
- 另见
我认为\018
被解释为十六进制/unicode字符。字符串中没有\。字符串对象没有前缀。源代码中的字符串文本是这样的,但是一旦Python解释了该文本,它是r'a\b'
还是'a\\b'
,它们都变成了相同的字符串,a\b
。我认为\018
被解释为十六进制/unicode字符。字符串中没有\。字符串对象没有前缀。源代码中的字符串文本是这样的,但一旦Python解释了该文本,它是r'a\b'
还是'a\\b'
——它们都变成了同一个字符串,a\b
\018并不代表字符。它是一个\x01和一个普通的旧'8'\x01是“标题的开始”控制字符。谢谢,我正在查找它是什么字符。很明显,“\018”被解释为“\x018”。如何在替换工作中禁用此功能?@bl79但没有什么可替换的。这就是答案saying@bl79. 我认为你没有抓住重点。文字表示法\x01
与内存表示法之间存在差异。您似乎不清楚哪个是哪个。\018不代表字符。它是一个\x01和一个普通的旧'8'\x01是“标题的开始”控制字符。谢谢,我正在查找它是什么字符。很明显,“\018”被解释为“\x018”。如何在替换工作中禁用此功能?@bl79但没有什么可替换的。这就是答案saying@bl79. 我认为你没有抓住重点。文字表示法\x01
与内存表示法之间存在差异。你似乎不清楚哪个是哪个。