str = r'c:\path\to\folder\' # my comment
Run Code Online (Sandbox Code Playgroud)
当字符串中的最后一个字符是反斜杠时,它似乎会转义最后一个单引号并将我的注释视为字符串的一部分.但原始字符串应该忽略所有转义字符,对吧?可能有什么不对?谢谢.
我正在创建一个严重依赖正则表达式的类.
让我们说我的课看起来像这样:
class Example:
def __init__(self, regex):
self.regex = regex
def __repr__(self):
return 'Example({})'.format(repr(self.regex.pattern))
Run Code Online (Sandbox Code Playgroud)
让我们说我像这样使用它:
import re
example = Example(re.compile(r'\d+'))
Run Code Online (Sandbox Code Playgroud)
如果我这样做repr(example),我会'Example('\\\\d+')',但我想要'Example(r'\\d+')'.考虑到打印时的额外反斜杠,它显示正确.我想我可以实现它返回"r'{}'".format(regex.pattern),但这并不适合我.万一Python软件基金会有一天会改变指定原始字符串文字的方式,我的代码就不会反映出来.不过,这是假设的.我主要担心的是这是否一直有效.不过,我无法想到一个优势的边缘情况.有更正式的方法吗?
编辑:格式规范迷你语言,printf样式字符串格式指南或string模块似乎没有出现任何内容.
以下程序无法编译:
#include <iostream>
int main() {
std::cout << R"RAW_STRING_LITERAL(
hello
world
)RAW_STRING_LITERAL";
}
Run Code Online (Sandbox Code Playgroud)
错误: raw string delimiter longer than 16 characters.
为什么对原始字符串分隔符施加限制长度?
我的Python版本是:
~$ python --version
Python 2.6.6
Run Code Online (Sandbox Code Playgroud)
我尝试在Python中使用(我想要显示所有内容):
1: \用作转义序列
>>> str('Let\'s Python')
"Let's Python"
Run Code Online (Sandbox Code Playgroud)
2: \用作转义序列
>>> 'Let\'s Python'
"Let's Python"
Run Code Online (Sandbox Code Playgroud)
3:str()打印为值而不是类型
>>> print 'Let\'s Python'
Let's Python
Run Code Online (Sandbox Code Playgroud)
4:它的Python是一个原始字符串
>>> repr('Let\'s Python')
'"Let\'s Python"'
Run Code Online (Sandbox Code Playgroud)
[ 问题 ]
5:Python原始字符串
>>> print r'Let\'s Python'
Let\'s Python
Run Code Online (Sandbox Code Playgroud)
6:这个,我不明白以下几点:
>>> r'Let\'s Python'
"Let\\'s Python"
>>> r'\\'
'\\\\'
Run Code Online (Sandbox Code Playgroud)
为什么\\?为什么输出5和6不同?
r 并且repr()一样不一样?
另请说明内部表示,string 并且raw strings相同或不同.
您可以通过以下方式从字符串创建原始字符串
test_file=open(r'c:\Python27\test.txt','r')
Run Code Online (Sandbox Code Playgroud)
如何从字符串变量创建原始变量,例如
path = 'c:\Python27\test.txt'
test_file=open(rpath,'r')
Run Code Online (Sandbox Code Playgroud)
因为我有一个文件路径:
file_path = "C:\Users\b_zz\Desktop\my_file"
Run Code Online (Sandbox Code Playgroud)
当我做:
data_list = open(os.path.expandvars(file_path),"r").readlines()
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
scheduled_data_list = open(os.path.expandvars(file_path),"r").readlines()
IOError: [Errno 22] invalid mode ('r') or filename: 'C:\\Users\x08_zz\\Desktop\\my_file'
Run Code Online (Sandbox Code Playgroud) 我在这里很困惑,即使原始字符串转换为每个\,\\但\最后它出现时会引发错误.
>>> r'so\m\e \te\xt'
'so\\m\\e \\te\\xt'
>>> r'so\m\e \te\xt\'
SyntaxError: EOL while scanning string literal
Run Code Online (Sandbox Code Playgroud)
更新:
我正在打开一本工作簿openpyxl:
wb = load_workbook(r'seven.xlsx', data_only=True)
Run Code Online (Sandbox Code Playgroud)
电子表格的名称并不总是事先知道,所以我需要重写这个硬编码以允许一个变量,同时仍然保持r?
如果我的变量名是 sheet,那么:
wb = load_workbook(sheet, data_only=True)
Run Code Online (Sandbox Code Playgroud)
将省略r.
显然我不能这样做:
wb = load_workbook(r'sheet', data_only=True)
Run Code Online (Sandbox Code Playgroud)
我们如何实现 r 到变量的前置/我们如何将 vriable 包装在其中r''?
我不理解python正则表达式中scape运算符\的功能以及原始字符串的r'的逻辑。一些帮助表示赞赏。
码:
import re
text=' esto .es 10 . er - 12 .23 with [ and.Other ] here is more ; puntuation'
print('text0=',text)
text1 = re.sub(r'(\s+)([;:\.\-])', r'\2', text)
text2 = re.sub(r'\s+\.', '\.', text)
text3 = re.sub(r'\s+\.', r'\.', text)
print('text1=',text1)
print('text2=',text2)
print('text3=',text3)
Run Code Online (Sandbox Code Playgroud)
该理论说:反斜杠字符('\')表示特殊形式或允许使用特殊字符而无需调用特殊含义。
就此问题末尾提供的链接而言,r'表示原始字符串,即符号没有特殊含义,它保持不变。
所以在上面的正则表达式中,我希望text2和text3是不同的,因为替换文本是'。'。在文本2中,即句点,而(原则上)文本3中的替代文本为r'。这是一个原始字符串,即应显示的字符串,反斜杠和句点。但它们的结果相同:
结果是:
text0= esto .es 10 . er - 12 .23 with [ and.Other ] here is more ; puntuation
text1= esto.es 10. er- 12.23 with [ and.Other ] here is more; puntuation
text2= esto\.es 10\. er …Run Code Online (Sandbox Code Playgroud) 老实说,原始字符串文字是C++语言的一个很好的补充.但是(正如预期的那样)编辑们很难正确地展示这些文字.
我正在使用Vim 7.4和开箱即用的原始字符串文字完全打破语法高亮.例如在
char const txt[] = R"(printf(")";
Run Code Online (Sandbox Code Playgroud)
第二个'('在vim中突出显示为红色.
就像是
char const txt2[] = R"( "{{" )";
Run Code Online (Sandbox Code Playgroud)
打破花括号的突出显示和基于语法的自动识别 - 依此类推.
首先,我很乐意让Vim忽略语法高亮之间R"(和之间的所有)"内容.
但请注意,原始字符串文字是灵活的 - 在第一个/最后一个双引号/括号对之间允许任意匹配字符串,例如
R"abcd()")")abcd"
Run Code Online (Sandbox Code Playgroud)
也是一个有效的原始字符串文字编码
)")"
另请参阅cppreference链接以获取语法的一般定义.
因此,我的问题是如何配置Vim,以便正确识别C++原始字符串文字.
Vim似乎已经包含了一些正确的synatx功能,突出了嵌入在宿主语言中的语言片段(例如,对于编译器 - 编译器源文件).也许它们也可以用于原始字符串文字案例?
三重行情
'''
This is a
multi-line
string.
'''
Run Code Online (Sandbox Code Playgroud)
串联
('this is '
'a string')
Run Code Online (Sandbox Code Playgroud)
逃跑
'This is'\
'a string'
Run Code Online (Sandbox Code Playgroud)
我也知道在字符串前面加上前缀r会使它成为原始字符串,对文件路径很有用。
r'C:\Path\To\File'
Run Code Online (Sandbox Code Playgroud)但是,我有一个很长的文件路径,它跨越多行并且需要是一个原始字符串。我该怎么做呢?
这有效:
In [1]: (r'a\b'
...: '\c\d')
Out[1]: 'a\\b\\c\\d'
Run Code Online (Sandbox Code Playgroud)
但出于某种原因,这不会:
In [4]: (r'on\e'
...: '\tw\o')
Out[4]: 'on\\e\tw\\o'
Run Code Online (Sandbox Code Playgroud)
为什么"t"只有一个反斜杠?
rawstring ×10
python ×8
string ×6
c++ ×2
backslash ×1
c++11 ×1
c++14 ×1
c++17 ×1
multiline ×1
python-2.7 ×1
python-3.x ×1
regex ×1
substitution ×1
vim ×1