我无法相信将变量视为原始字符串很难!我搜索过并发现了类似的问题,但没有正确答案。
我有一个存储有域名的变量。例如'domain \ user',我只需要使用re
获取用户名。问题是Python为特殊字符组合提供了十六进制值,例如当我在字符串中有\b
时。
我只需要从变量中获取文字字符串,而不是别的。
author = list[0] // list[0] contains 'domain\blah'
author = re.sub('.*\\\\(.+)$', r'\1', author)
我希望blah
获得'domain\x08lah'
!
在开始时将字符串保存为原始字符串不是一个选项,因为我从其他正则表达式操作中获取字符串。
有什么想法吗?
修改
我误以为假设变量有一个斜杠。实际上,当从另一个操作获取变量时,反斜杠已经被转义。因此,在尝试创建测试场景时,我自己也成了问题。
答案 0 :(得分:2)
原始字符串文字仅用于创建字符串值,避免使用常规字符串文字将使用的(大多数)字符串转义码。
您的字符串以\x08
字符开始;它从不包含反斜杠和b
字符。如果您使用字符串文字定义list[0]
中包含的值,则忘记转义反斜杠。如果数据来自其他地方,那么您正在查看原始十六进制字节值08:
>>> list_0 = 'domain\x08lah'
>>> list_0[6]
'\x08'
>>> len(list_0[6])
1
>>> ord(list_0[6])
8
如果这个字节只是两个字符,你可以用字符串替换来修复数据:
>>> list_0.replace('\b', '\\b')
'domain\\blah'