在问这个问题时,我意识到我对原始字符串知之甚少.对于那些自称是Django训练师的人来说,这很糟糕.
我知道编码是什么,而且我知道u''自从我得到什么是Unicode以来我们独自做了什么.
但到底r''做了什么呢?它会产生什么样的字符串?
And above all, what the heck does ur'' do?
Finally, is there any reliable way to go back from a Unicode string to a simple raw string?
Ah, and by the way, if your system and your text editor charset are set to UTF-8, does u'' actually do anything?
>>> r'\'
File "<stdin>", line 1
r'\'
^
SyntaxError: EOL while scanning string literal
>>> r'\\'
'\\\\'
>>> r'\\\'
File "<stdin>", line 1
r'\\\'
^
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
似乎解析器可以将原始字符串中的反斜杠视为常规字符(不是原始字符串的全部内容吗?),但我可能遗漏了一些明显的东西.TIA!
我第一次看到它用于构建跨多行的正则表达式作为方法参数re.compile(),所以我认为它r代表RegEx.
例如:
regex = re.compile(
r'^[A-Z]'
r'[A-Z0-9-]'
r'[A-Z]$', re.IGNORECASE
)
Run Code Online (Sandbox Code Playgroud)
那么r在这种情况下意味着什么呢?我们为什么需要它?
有没有办法在Java中使用原始字符串(没有转义序列)?
(我正在编写相当数量的正则表达式代码,原始字符串会使我的代码更具可读性)
我知道这种语言并没有直接提供,但有没有办法以任何方式"模拟"它们?
从正则表达式的python文档,关于'\'字符:
解决方案是使用Python的原始字符串表示法来表示正则表达式模式; 在前缀的字符串文字中,不以任何特殊方式处理反斜杠
'r'.所以r"\n"是一个包含'\'和的双字符字符串'n',"\n"而是包含换行符的单字符字符串.通常,模式将使用此原始字符串表示法在Python代码中表示.
什么是原始字符串表示法?如果您使用原始字符串格式,这是否意味着"*"作为文字字符而不是零或多指标?这显然是不对的,否则正则表达式将彻底失去它的力量.但是,如果它是一个原始字符串,它"\n"是如何识别换行符,如果它实际上是一个反斜杠和一个"n"?
我不跟随.
编辑赏金:
我试图理解原始字符串正则表达式如何匹配换行符,制表符和字符集,例如\w单词或\d数字或所有其他,如果原始字符串模式不能将反斜杠识别为普通字符以外的任何内容.我真的可以使用一些很好的例子.
此代码适用于Visual C++ 2013,但不适用于gcc/clang:
#if 0
R"foo(
#else
int dostuff () { return 23; }
// )foo";
#endif
dostuff();
Run Code Online (Sandbox Code Playgroud)
Visual C++首先删除if 0.Clang首先扩展R原始字符串(并且永远不会定义dostuff).谁是对的,为什么?
我对Python原始字符串有点困惑.我知道如果我们使用原始字符串,那么它会将'\'视为正常的反斜杠(例如r'\n'将是'\'和'n').但是,我想知道如果我想匹配原始字符串中的新行字符.我试过r'\n',但它不起作用.有人对此有一些好主意吗?
String.rawECMAScript 6中引入的Raw String Access 的实际用途是什么?
// String.raw(callSite, ...substitutions)
function quux (strings, ...values) {
strings[0] === "foo\n"
strings[1] === "bar"
strings.raw[0] === "foo\\n"
strings.raw[1] === "bar"
values[0] === 42
}
quux `foo\n${ 42 }bar`
String.raw `foo\n${ 42 }bar` === "foo\\n42bar"
Run Code Online (Sandbox Code Playgroud)
http://es6-features.org/#RawStringAccess
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/template_strings
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/raw
http://www.2ality.com/2015/01/es6-strings.html
https://msdn.microsoft.com/en-us/library/dn889830(v=vs.94).aspx
唯一能理解的是,它用于获取模板字符串的原始字符串形式,并用于调试模板字符串.
什么时候可以用于实时开发?他们称之为标签功能.那是什么意思?
我错过了哪些具体的用例?
在Python中,我有一个这样的字符串:
'\\x89\\n'
Run Code Online (Sandbox Code Playgroud)
如何将其解码为普通字符串,如:
'\x89\n'
Run Code Online (Sandbox Code Playgroud) 在Python中,我可以r为字符串文字(原始字符串)添加前缀,以告诉解释器不要在字符串中翻译特殊字符:
>>> r"abc\nsdf#$%\^"
r"abc\nsdf#$%\^"
Run Code Online (Sandbox Code Playgroud)
有没有办法在Clojure中做同样的事情?
rawstring ×10
python ×6
string ×4
regex ×3
literals ×2
c++ ×1
c++11 ×1
clojure ×1
ecmascript-6 ×1
escaping ×1
java ×1
javascript ×1
python-2.x ×1
python-3.x ×1
syntax ×1
unicode ×1