在我的JSON文件中,其中一个字段必须携带另一个文件(字符串)的内容。
该字符串具有CRLF,单/双引号,制表符。
有没有办法将我的整个字符串视为原始字符串,这样我就不必转义特殊字符了?
JSON中的等效字符串与C ++中的字符串原始定界符一样吗?
在C ++中,我只是将整个文件内容放入:R“(...)”
我正在开发一个生成 JavaScript 的系统,我想最大限度地减少需要为字符串文字完成的转义量。我目前的方法是使用String.raw模板文字函数,这样我就不必担心\在输出中被解释的字符。
唯一的问题是文字反引号(即`字符)仍然需要转义,否则它们会提前终止字符串。它们不能被转义,\`因为转义序列不受尊重。
我能想到的最佳选择是使用占位符(例如String.raw`foo${"`"}bar`get "foo`bar"),但我有点担心占位符评估的运行时成本。还有其他选择吗?
clang-format 12 (12.0.1) 的选项是什么,它在 R 前缀和原始字符串之间放置一个空格:
std::string str = R"(raw string)";
Run Code Online (Sandbox Code Playgroud)
与
std::string str = R "(raw string)";
Run Code Online (Sandbox Code Playgroud)
gcc (9.3.0) 或 VSCode 1.62.3 使用的 clang 不接受后者,因此这实际上破坏了源文件/构建。
我的 .clang-format 文件设置会导致出现空格,内置的 gnu 预设也会出现这种情况。其他预设(llvm、google、chromium、microsoft、mozilla 或 webkit)都不会导致此问题。
我已经转储了所有格式,并逐个设置地比较了它们。我首先删除了配置中与未导致此问题的预设之一相匹配的所有设置。然后我消除了 gnu 预设和未添加空格的预设之间相同的任何剩余设置。最后,我检查了剩下的几个设置,并将 .clang-format 文件中的设置更改为工作预设中的值,以查看它们是否解决了问题,但它们没有。
这样做,我似乎已经消除了所有的设置作为原因。
在我花更多时间、几个小时挖掘实际的源代码之前,我希望有人对此有一些见解,并能够向我指出导致问题的设置。
作为参考,我在下面包含了我的 .clang-format 设置文件。但正如所指出的,gnu 预设也表现出这种行为。
谢谢你的帮助。
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignConsecutiveMacros: None
AlignEscapedNewlines: Right
AlignOperands: Align
AlignTrailingComments: true
AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: …Run Code Online (Sandbox Code Playgroud) 考虑一个具有UNIX行尾(即'\x0a'而不是"\x0d\x0a")并且包含以下原始字符串文字的C ++文件:
const char foo[] = R"(hello^M
)";
Run Code Online (Sandbox Code Playgroud)
(^M实际字节为0x0d(即回车))。
后续字符串比较(考虑标准对原始字符串文字的定义时)应该是什么结果?
strcmp("hello\r\n", foo);
Run Code Online (Sandbox Code Playgroud)
字符串应该相等还是不相等?(即0或!=0?)
使用GCC 4.8(在Fedora 19上),它们比较不相等。
这是GCC中的错误或功能吗?
我试图在C#中提供包含特殊/转义字符的文件路径.我是C#的新手.请帮我定义文件路径为raw string literals.
以下是路径(\t具有spl意义):
IE_DRIVER_PATH ="C:\ software\selenium\temp\drivers\64"
在python中我们使用它如下(使用r- 将其视为原始stiring):
IE_DRIVER_PATH = r"C:\ software\selenium\temp\drivers\64"
同样,在java中,我们使用double slashes.
请帮我在C#中定义相同内容.截至目前,我收到的错误表明文件不存在,尽管文件存在于文件夹中.
我R"(...)"用来定义一个原始字符串但是,如果字符串实际上包含一个原始字符串终止符)",编译器会抱怨.
例如:
auto tag = R"("(add)")"; // try to get string <"(add)">
Run Code Online (Sandbox Code Playgroud)
如何修改它以便它可以工作?
编辑:一旦你拿起"r"标志的含义,这个问题就没有意义了.更多细节在这里.对于寻找快速安全的人,我在下面补充道.
如果我在Python脚本中手动输入正则表达式,我可以为模式字符串使用4种标志组合:
我有一堆来自Web表单输入的unicode字符串,并希望将它们用作regexp模式.
我想知道我应该对字符串应用什么过程,所以我可以期望使用上面的手册形式得到类似的结果.就像是 :
import re
assert re.match(p1, some_text) == re.match(someProcess1(web_input), some_text)
assert re.match(p2, some_text) == re.match(someProcess2(web_input), some_text)
assert re.match(p3, some_text) == re.match(someProcess3(web_input), some_text)
assert re.match(p4, some_text) == re.match(someProcess4(web_input), some_text)
Run Code Online (Sandbox Code Playgroud)
someProcess1到someProcessN会是什么?为什么?
我想someProcess2不需要做任何事情,而someProcess1应该做一些unicode转换到本地编码.对于原始字符串文字,我无能为力.
val name = "mike"
val str = """Hi, {name}!"""
println(str)
Run Code Online (Sandbox Code Playgroud)
我希望它输出str as Hi, mike!,但失败了.这该怎么做?
我有很多充满换行符的文本文件,我正在 python 3.4 中解析它们。我正在寻找换行符,因为它们将我的文本分成不同的部分。这是一个文本示例:
\n\ntext = \'avocat ;\\n\\n m. x\'\nRun Code Online (Sandbox Code Playgroud)\n\n我 na\xc3\xafvely 开始在正则表达式(RE)中寻找带有 \' \\n\' 的换行符,而不认为反斜杠 \' \\\' 是转义字符。然而,事实证明这工作得很好:
>>> import re\n\n>>> pattern1 = \'\\n\\n\'\n>>> re.findall(pattern1, text)\n[\'\\n\\n\']\nRun Code Online (Sandbox Code Playgroud)\n\n然后,我明白我应该使用双反斜杠来寻找一个反斜杠。这也运行得很好:
\n\n>>> pattern2 = \'\\\\n\\\\n\'\n>>> re.findall(pattern2, text)\n[\'\\n\\n\']\nRun Code Online (Sandbox Code Playgroud)\n\n但在另一个线程上,我被告知使用原始字符串而不是常规字符串,但这种格式无法找到我正在寻找的换行符:
\n\n>>> pattern3 = r\'\\\\n\\\\n\'\n>>> pattern3\n\'\\\\\\\\n\\\\\\\\n\'\n>>> re.findall(pattern3, text)\n[]\nRun Code Online (Sandbox Code Playgroud)\n\n你能帮我一下吗?我有点困惑我应该使用什么 RE 之王才能正确匹配换行符。
\n我知道字符串文字总是以 null 结尾,甚至""长度为 1。
原始字符串文字的情况是否相同,例如:R"()"长度是否为 1?