首页 > 编程语言 >C++、Lua、Python字符串防止转义

C++、Lua、Python字符串防止转义

时间:2023-07-05 13:34:15浏览次数:40  
标签:name sequence Python C++ 转义 char Lua 字符串

使用场景

  1. C++里测试路径需要转义,Windows复制路径里面的斜杠需要加斜杠,每次都需要操作比较麻烦,而且看着也不好看
  2. 换行,代码里有时候硬编码一些文本、数据,依赖""的自动拼接和行末的斜杠,需要手动写\r\n换行

C++ Raw string literal

以前用Lua,里有[[]],防止转义非常方便。
后来了解到Python也有r""
C++没怎么看到过这种用法,都是手动转义,突然想有没有这种特性,找了下C++还真有,C++11的新(误:老)特性。
https://en.cppreference.com/w/cpp/language/string_literal

prefix (optional) R"d-char-sequence (optional)(r-char-sequence (optional))d-char-sequence (optional)"

普通字符串

const char* s0 = "Hello";
const char* s1 = "C:\\name\\a\\b\\c";

禁止转义、自动补充换行的字符串

const char* s0 = R"(C:\name\a\b\c)";
const char* s1 = R"(
    C:\name\a\b\c
)";

C++中需要注意\r\n\n 等在不同平台的影响,待补充……

定义中还有一部分是d-char-sequence,这个部分既然可选,为什么需要它的存在呢,什么情况下需要写d-char-sequence
https://stackoverflow.com/questions/71550127/what-is-the-purpose-of-d-char-sequence-in-c-raw-strings

如果用户的字符串中包含默认的终止串)",则可以通过d-char-sequence自定义起始终止串,比如可以定义为)mySequence",由使用的人保证字符串中不出现自定义终止串。
d-char-sequence的最多16个字符,使用基础字符集的字符(不含小括号、斜杠\、空格)。在字符串小括号前指定,结尾和开头一致。

// x)"x
const char* s1 = R"mySequence(x)"x)mySequence";

Lua

普通字符串

local str = "Hello"
local str2 = "C:\\name\\a\\b\\c"

禁止转义、自动补充换行的字符串

local rstr = [[C:\name\a\b\c]]

local rstr2 = [[
    C:\name\a\b\c
]]

字符串中包含默认的终止串]],则自定义起始终止串,在两个中括号之间加n个=,起始和结束的=个数一致

local rsnconflict = [==[
    C:\name\a\b\c]]
]==]

Python

https://docs.python.org/3.13/tutorial/introduction.html#strings
普通字符串(单引号、双引号)

str0 = "Hello"
str1 = 'Hello'
str2 = "C:\\name\\a\\b\\c"

禁止转义(r)可以换行(三引号)的字符串

# 双引号字符串中的单引号不用转义,反之亦然
str1 = "''"
str2 = '""'

# 换行
rstr = """
C:\\name\\a\\b\\c
"""

# 禁止转义
rstr = r"C:\name\a\b\c"
rstr1 = r'C:\name\a\b\c'

# 禁止转义且自动包含换行(末尾加\防止换行)
rstr2 = r"""
C:\name\a\b\c
no End\
"""

字符串中包含默认的终止串"""或者''',可以用另一种引号代替。
如果两个都有,则可以用format或者+来拼接字符串,把和终止串一样的部分单独提出来,例子中把"""提出来,用单引号扩起来表示后,再format到目标字符串中(没有找到python自定义起始字符串的方式orz)

# 如果字符串包含以下五种类型(想使用r防止转义)
# '
# "
# C:\name\a\b\c
# """
# '''
tmp = '"""'
rsnconflict = fr"""
'
"
C:\name\a\b\c
'''
{tmp}
"""

标签:name,sequence,Python,C++,转义,char,Lua,字符串
From: https://www.cnblogs.com/muke-l/p/17528275.html

相关文章

  • C++ 继承
     面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的......
  • c++项目打包,发布win安装包
                      添加文件夹里面除了子文件夹的所有文件 ......
  • python celery 使用
    目录结构配置点击查看代码fromceleryimportCelery,platformsfromkombuimportExchange,Queueplatforms.C_FORCE_ROOT=Truebroker='redis://127.0.0.1:6380/1'backend='redis://127.0.0.1:6380/2'app=Celery('sxj',b......
  • Python史上最全种类数据库操作方法,你能想到的数据库类型都在里面!甚至还有云数据库!
    本文将详细探讨如何在Python中连接全种类数据库以及实现相应的CRUD(创建,读取,更新,删除)操作。我们将逐一解析连接MySQL,SQLServer,Oracle,PostgreSQL,MongoDB,SQLite,DB2,Redis,Cassandra,MicrosoftAccess,ElasticSearch,Neo4j,InfluxDB,Snowflake,AmazonDynamoDB,MicrosoftAzureCosMosDB数据......
  • Python基础语法--课程笔记
    Smiling&Weeping----我的心是旷野的鸟,在你的眼睛里找到了它的天空定义和使用类:1.声明类:class类名:成员变量,成员函数2.定义类的对象:对象名=类名()3.成员变量:  公有变量私有变量__xxx4.构造函数: ......
  • 让python的lxml模块的xpath支持正则表达式
    python的lxml模块是处理xml文档的比较好用的工具,其中的xpath函数可以检索指定的元素,但是它不支持正则表达式,比如某个属性的值是否匹配某个正则表达式,就没有办法实现.不过可以利用它的自定义函数扩展功能来实现,如下代码所示:importrefromlxmlimportetreefromlxm......
  • [-002-]-Python3+Unittest+Selenium Web UI自动化测试之显示等待WebDriverWait
    1、WebDriverWait基本用法引入包#文件引入fromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditionsasEC每0.5s定位ID为userid的元素,如果定位成功,执行下面的代码;直至15s超时抛出异常可用来检查页面元素是......
  • python 导入错误 ImportError: Unable to import required dependencies: numpy
    python导入错误ImportError:Unabletoimportrequireddependencies:numpy  python3.9对应的numpy版本  参考:https://blog.csdn.net/guigenyi/article/details/126248488https://wenku.csdn.net/answer/0366fcc7857bccdefced2aaa09d7b02chttps://wenku.csdn.n......
  • python解析json数据
    python解析json数据demodata={"name":"John","age":30,"hobbies":["reading","running","swimming"],"scores":[85,90,95]}forkey,valueindata.items()......
  • 60.C++中新增了string,它与C语言中的 char *有什么区别吗?它是如何实现的?
    60.C++中新增了string,它与C语言中的char*有什么区别吗?它是如何实现的?1.实现方式:string是一种抽象类,它的实现由std::string和char*转换而来。在实现上,std::string内部通常会使用动态数组来存储字符串,可以动态地分配内存。同时,std::string还可能使用一些优化技术,如内部缓存和......