从变量打印原始字符串? (没有得到答案)

Posted

技术标签:

【中文标题】从变量打印原始字符串? (没有得到答案)【英文标题】:Print raw string from variable? (not getting the answers) 【发布时间】:2013-09-13 11:30:32 【问题描述】:

我正在尝试找到一种从变量中以原始形式打印字符串的方法。例如,如果我向 Windows 添加一个环境变量作为路径,它可能看起来像 'C:\\Windows\Users\alexb\',我知道我可以这样做:

print(r'C:\\Windows\Users\alexb\')

但我不能在变量前面加上r....例如:

test = 'C:\\Windows\Users\alexb\'
print(rtest)

显然只是尝试打印rtest

我也知道有

test = 'C:\\Windows\Users\alexb\'
print(repr(test))

但这会返回'C:\\Windows\\Users\x07lexb' 也一样

test = 'C:\\Windows\Users\alexb\'
print(test.encode('string-escape'))

所以我想知道是否有任何优雅的方法可以使保存该路径的变量打印 RAW,仍在使用测试?如果只是这样就好了

print(raw(test))

但事实并非如此

【问题讨论】:

python : how to convert string literal to raw string literal? 的可能重复项 顺便说一句,r'C:\Windows\Users\alexb\' 实际上是一个语法错误。 【参考方案1】:

这就是诀窍

>>> repr(string)[1:-1]

这是证据

>>> repr("\n")[1:-1] == r"\n"
True

如果需要,它可以很容易地外推到一个函数中

>>> raw = lambda string: repr(string)[1:-1]
>>> raw("\n")
'\\n'

【讨论】:

【参考方案2】:

这是一个简单的解决方案。

address = 'C:\Windows\Users\local'
directory ="r'"+ address +"'"

打印(目录)

"r'C:\\Windows\\Users\\local'"

【讨论】:

【参考方案3】:

试试这个。根据您想要的输出类型。有时您可能不需要在打印的字符串周围加上单引号。

test = "qweqwe\n1212as\t121\\2asas"
print(repr(test)) # output: 'qweqwe\n1212as\t121\\2asas'
print( repr(test).strip("'"))  # output: qweqwe\n1212as\t121\\2asas

【讨论】:

请说明投反对票的原因。我昨天刚刚在我的应用程序中使用了这种方法。【参考方案4】:

我写了一个小函数..但对我有用

def conv(strng):
    k=strng
    k=k.replace('\a','\\a')
    k=k.replace('\b','\\b')
    k=k.replace('\f','\\f')
    k=k.replace('\n','\\n')
    k=k.replace('\r','\\r')
    k=k.replace('\t','\\t')
    k=k.replace('\v','\\v')
    return k

【讨论】:

【参考方案5】:

使用以下方法之一将反斜杠替换为正斜杠:

re.sub(r"\", "/", x) re.sub(r"\", "/", x)

【讨论】:

【参考方案6】:

我将变量分配给大型复杂模式字符串以与 re 模块一起使用,它与其他几个字符串连接,最后我想打印它然后复制并在 regex101.com 上检查。 但是当我以交互模式打印它时,我得到双斜杠 - '\\w' 正如@Jimmynoarms 所说:

python 3x 的解决方案:

print(r'%s' % your_variable_pattern_str)

【讨论】:

【参考方案7】:

只需简单地使用 r'string'。希望这会对您有所帮助,因为我发现您还没有得到预期的答案:

    test = 'C:\\Windows\Users\alexb\'
    rawtest = r'%s' %test

【讨论】:

【参考方案8】:

我知道我回答得太晚了,但对于阅读本文的人来说,我找到了一种更简单的方法

myVariable = 'This string is supposed to be raw \'
print(r'%s' %myVariable)

【讨论】:

【参考方案9】:

我遇到了类似的问题,偶然发现了这个问题,感谢 Nick Olson-Harris 的answer,解决方案在于更改字符串。

两种解决方法:

    使用原生python函数获取你想要的路径,例如:

    test = os.getcwd() # In case the path in question is your current directory
    print(repr(test))
    

    这使它独立于平台,现在可以与.encode 一起使用。如果这是您的选择,那么它是更优雅的解决方案。

    如果您的字符串不是路径,请以与 python 字符串兼容的方式定义它,在这种情况下通过转义您的反斜杠:

    test = 'C:\\Windows\\Users\\alexb\\'
    print(repr(test))
    

【讨论】:

【参考方案10】:

一般来说,要从字符串变量中生成原始字符串,我使用这个:

string = "C:\\Windows\Users\alexb"

raw_string = r"".format(string)

输出:

'C:\\\\Windows\\Users\\alexb'

【讨论】:

有趣的是,这不适用于 \v >>> k = "\vsadfkjhkasdf\nasdfsadf" >>> r = r"".format(k) >>> r `'\x0bsadfkjhkasdf\nasdfsadf'`` 这对variable = r"".format(another_variable) 有效 它不起作用:`str1 = 'dfdf\"dfdfd' str2 = r"".format(str1) print(str2)` 输出:dfdf"dfdfd【参考方案11】:

由于结尾 \" 的转义字符,您的特定字符串将无法按键入的方式工作,不允许它在引号中关闭。

也许我在那个方面是错误的,因为我对 python 还是很陌生,所以如果是这样,请纠正我,但是,稍微改变一下以适应它,repr() 函数将完成复制任何字符串的工作作为原始字符串存储在变量中。

你可以通过两种方式做到这一点:

>>>print("C:\\Windows\Users\alexb\\")

C:\Windows\Users\alexb\

>>>print(r"C:\\Windows\Users\alexb\\")
C:\\Windows\Users\alexb\\

将其存储在变量中:

test = "C:\\Windows\Users\alexb\\"

使用 repr():

>>>print(repr(test))
'C:\\Windows\Users\alexb\\'

或用 %r 替换字符串

print("%r" %test)
'C:\\Windows\Users\alexb\\'

该字符串将用单引号复制,因此您需要在之后将其去掉。

【讨论】:

【参考方案12】:

在存储或操作原始字符串之前去掉转义字符:

您可以将路径“\”的任何反斜杠更改为正斜杠“/”,然后再将它们存储到变量中。正斜杠不需要转义:

>>> mypath = os.getcwd().replace('\\','/')  
>>> os.path.exists(mypath)  
True  
>>>   

【讨论】:

【参考方案13】:

您不能将现有字符串转换为“原始”。 解析器可以理解文字上的r前缀;它告诉它忽略字符串中的转义序列。但是,一旦解析了字符串文字,原始字符串和“常规”字符串之间就没有区别了。例如,如果您有一个包含换行符的字符串,则无法在运行时判断该换行符是否来自转义序列\n,来自三引号字符串中的文字换行符(甚至可能是原始换行符!) ,通过调用chr(10),通过从文件中读取它,或者您可能想出的任何其他方式。从任何这些方法构造的实际字符串对象看起来都是一样的。

【讨论】:

我相信你真的明白了。当我需要在re.sub 调用中使用re 和变量时(使用Windows 路径,但只是其中的一个例子),以上方法都不适合我。我解决了(严重)重新转义字符串:path = r"c:\this\is\a\test.txt" ; part_to_be_changed = r"c:\this" ; part_to_be_changed_reescaped = re.sub("\\\\", "\\\\\\\\", part_to_be_changed) ; new_part = "d:\\this_really" ; new_part_reescaped = re.sub("\\\\", "\\\\\\\\", new_part) ; new_string = re.sub(part_to_be_changed_reescaped, new_part_reescaped, path) ; print(new_string) ; >> d:\this_really\is\a\test.txt

以上是关于从变量打印原始字符串? (没有得到答案)的主要内容,如果未能解决你的问题,请参考以下文章

printf()和puts()在C中有什么区别?

错误:预期颜色但得到(原始字符串)颜色/灰色

在UWP中打印原始数据

如何从字符串中提取第一个和最后一个单词?

如何将变量和字符串同时添加到同一打印语句中? [重复]

Python 学习星球3.0基本语法