Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Julia中替换字符串文字的前后斜杠?_Python_Julia_Backslash_String Literals - Fatal编程技术网

Python 如何在Julia中替换字符串文字的前后斜杠?

Python 如何在Julia中替换字符串文字的前后斜杠?,python,julia,backslash,string-literals,Python,Julia,Backslash,String Literals,在Python中,我可以这样替换斜杠的字符串: >>> s = 'ab\c' >>> s.replace('\\', '\\\\') 'ab\\\\c' >>> print s.replace('\\', '\\\\') ab\\c 在朱莉娅,当我能做到这一点时: julia> s = "ab\\c" "ab\\c" julia> replace(s, "\\\\", "\\\\\\\\") "ab\\c" 我已经尝试过了,

在Python中,我可以这样替换斜杠的字符串:

>>> s = 'ab\c'
>>> s.replace('\\', '\\\\')
'ab\\\\c'
>>> print s.replace('\\', '\\\\')
ab\\c
在朱莉娅,当我能做到这一点时:

julia> s = "ab\\c"
"ab\\c"

julia> replace(s, "\\\\", "\\\\\\\\")
"ab\\c"
我已经尝试过了,但它引发了一些语法错误:

julia> replace(s, r"\", r"\\")
ERROR: syntax: "\" is not a unary operator

Julia REPL以转义的形式输出字符串。最好用
println
包装东西,如
println(替换(“\\”,“\\\\”)
。在这种情况下,您会得到:

julia> s = "ab\\c"
"ab\\c"

julia> println(s)
ab\c

julia> println(replace(s, "\\", "\\\\"))
ab\\c
关于正则表达式的使用,第一个
r“\”
是一个部分正则表达式,解析器在关闭
后继续并在下面的
\
上生成一个错误,第二个regexp是不必要的,因为它是要插入的字符串

更新:关于Julia vs.Python转义的更多细节,请参见另一个答案


希望这有帮助!

这里有两个混淆的来源,其中一个是Dan提到的打印与REPL输出问题。然而,混淆的根本原因似乎是字符串文本在Julia和Python中有不同的转义行为:

  • 在Julia中,字符串文字内部的
    \
    总是转义下一个字符–单个反斜杠永远不会生成文字反斜杠,它总是与以下字符组合。如果以下字符作为转义没有特殊意义,则以下字符是由其自身生成的,并且在转义中没有反斜杠结果字符串。这里就是这种情况:以
    c
    开头的转义没有特殊意义,因此
    “ab\c”
    “abc”
    相同

  • 在Python中,字符串文本内部的
    \
    有时会转义下一个字符,但如果后面的字符没有特殊含义,则它不会引入转义,因此序列会产生文本反斜杠以及后面的内容。在这种情况下,
    'ab\c'
    “ab\c”
    都等于
    ab\\c“
    (第二个反斜杠由第一个反斜杠转义,产生一个文字反斜杠)

请注意,两个反斜杠形式是Python提示符将字符串打印回您的方式–这是编写此字符串的标准方法,正确转义,而不是依赖于
c
作为转义字符没有特殊意义。如果反斜杠后面跟着其他具有特殊意义的字符作为转义字符escape(参见下面的示例),则输入字符串将完全表示其他内容

以下是Python中的一些示例:

>>> [c for c in "ab\c"]
['a', 'b', '\\', 'c']

>>> [c for c in "ab\\c"]
['a', 'b', '\\', 'c']

>>> [c for c in "a\bc"]
['a', '\x08', 'c']

>>> [c for c in "a\\bc"]
['a', '\\', 'b', 'c']

>>> [c for c in "\abc"]
['\x07', 'b', 'c']

>>> [c for c in "\\abc"]
['\\', 'a', 'b', 'c']
以下是Julia中的类似示例:

julia> [c for c in "ab\c"]
3-element Array{Char,1}:
 'a'
 'b'
 'c'

julia> [c for c in "ab\\c"]
4-element Array{Char,1}:
 'a'
 'b'
 '\\'
 'c'

julia> [c for c in "a\bc"]
3-element Array{Char,1}:
 'a'
 '\b'
 'c'

julia> [c for c in "a\\bc"]
4-element Array{Char,1}:
 'a'
 '\\'
 'b'
 'c'

julia> [c for c in "\abc"]
3-element Array{Char,1}:
 '\a'
 'b'
 'c'

julia> [c for c in "\\abc"]
4-element Array{Char,1}:
 '\\'
 'a'
 'b'
 'c'
转义符
\a
\b
在两种语言中都有特殊的含义–它们对ASCII“bell”和“backspace”进行编码“每种语言中的字符。区别在于序列
\c
:在Julia中,它只编码字符
c
,而在Python中,它编码两个字符–反斜杠和
c
,因为
c
恰好没有特殊的转义含义。朱丽亚的字符串逃逸规则与C、C++、java、perl和露比非常相似,并从中派生出来。我不确定Python的字符串转义行为的起源是什么


更新:字符串文本中的无效转义在Julia()和Python()的未来版本中将是语法错误。这使Julia和Python对字符串文本转义的行为达成一致。

替换(“\\”,“\\\\”)怎么样?(当然,在《朱莉娅》中)我可能误解了,但是
replace(s,“\\”,“\\\\”
有什么错呢。您不需要转义反斜杠。Julia REPL以转义形式输出字符串。在这种情况下,最好用
println
包装东西,如
println(replace(s,“\\”,“\\\”)
在REPL上虽然
replace(s,“\\”,“\\\”)
仍会输出
“ab\\\\\\c”
,但对于第二个
replace
,错误来自第一个正则表达式(需要另一个反斜杠),第二个参数在任何情况下都应该是一个字符串:`replace(s,r“\\\”,“\\\\”)我开始编辑你的答案,以添加一些关于转义行为差异的信息,但它最终完全重写了答案,所以我写了一个不同的答案。仅供参考:不是有效转义序列的反斜杠字符对现在会生成一个DeprecationWarning。尽管这最终会成为一个语法错误,但对于一些Python版本来说,这是不可能的。谢谢,@Liso。类似地,在Julia master上,无效转义序列现在是一个语法错误:。我们决定直接出错,而不是经历一个弃用期。Python和Julia现在具有几乎相同的wrt字符串转义行为。