Python 如何检测字符串中的转义序列

Python 如何检测字符串中的转义序列,python,parsing,string,escaping,Python,Parsing,String,Escaping,给定一个名为line的字符串,其原始版本具有此值: \rRAWSTRING 如何检测它是否具有转义字符\r\n?我试过的是: if repr(line).startswith('\r'): blah... 但它没有抓住它。我还尝试了查找,例如: if repr(line).find('\r') != -1: blah 也不行。我错过了什么 谢谢 编辑: 感谢所有回复和更正,并对混淆表示抱歉 好的,如果我这样做 print repr(line) 那么它打印的是: '\rSE

给定一个名为line的字符串,其原始版本具有此值:

\rRAWSTRING
如何检测它是否具有转义字符\r\n?我试过的是:

if repr(line).startswith('\r'):
    blah...
但它没有抓住它。我还尝试了查找,例如:

if repr(line).find('\r') != -1:
    blah
也不行。我错过了什么

谢谢

编辑:


感谢所有回复和更正,并对混淆表示抱歉

好的,如果我这样做

print repr(line)
那么它打印的是:

'\rSET ENABLE ACK\n'
(包括单引号)。我尝试了所有建议,包括:

line.startswith(r'\r')
line.startswith('\\r') 
每一个都返回False。还尝试:

line.find(r'\r')
line.find('\\r')
每个返回-1

您可以尝试:

if repr(line).startswith(r'\r'):


后者更好:似乎您使用
repr
只是为了获取转义字符。

不完全清楚您在问什么。您所说的是一个字符串,但也是一个“原始版本”,并且您的字符串包含“RAWSTRING”,这似乎意味着您所说的是原始字符串

这些都不是一回事

如果有一个普通字符串,其中的字符由“\r”表示,则可以使用任何普通方法来匹配:

>>> "\rastring".find('\r')
0
>>> 
如果您定义了一个实际的“原始字符串”,这将不起作用,因为您输入的不是“\r”字符,而是两个字符“\”和“r”:

>>> r"\rastring".find('\r')
-1
>>>
在这种情况下,或者如果一个普通字符串恰好包含字符“\”和“r”,并且您想要查找这两个字符,则需要使用原始字符串进行搜索:

>>> r"\rastring".find(r'\r')
0
>>> 
也可以通过转义反斜杠本身来搜索序列:

>>> r"\rastring".find('\\r')
0
>>> 
如果这不是你的意思,请准确地告诉我们
行中的内容。这样做:

print repr(line)
并将结果复制/通过到问题的编辑中

主题:反斜杠是转义字符,“\r”是转义字符。

最简单的:

>>> s = r'\rRAWSTRING'
>>> s.startswith(r'\r')
True
除非我严重误解了你的意思,否则你需要寻找转义序列,而不是回车字符本身。

如果:

print repr(line)
返回:

'\rSET ENABLE ACK\n'
然后:

这就是你要找的。例如:

>>> line = '\rSET ENABLE ACK\n'
>>> print repr(line)
'\rSET ENABLE ACK\n'
>>> line.find('\r')
0
>>> line.startswith('\r')
True
>>> '\r' in line
True
repr()返回一个显示字符串。它实际上包含打印行时看到的引号和反斜杠:

>>> print line
SET ENABLE ACK

>>> print repr(line)
'\rSET ENABLE ACK\n'
>>> print len(line)
16
>>> print len(repr(line))
20

伙计,看来你什么都试过了,除了最简单的,
lines.startswith('\r')


现在,只需坚持使用repr(),\r和r'string,并使用最简单的方法避免混淆。

您缺少的是
repr(line)
将包含
'\\r'
,(ASCII 92,114),而不是
'\r'
(ASCII 13)。换句话说,您需要
line.find('\r')
repr(line).find('\\r'))
。你看到区别了吗?我想你和我对OP的问题有不同的理解(毫不奇怪,因为他使用了奇怪的术语——例如,
\r
不可能是一个转义字符,因为他一直在调用它,所以我想他说的是转义序列)。我认为他的字符串是
r'\rRAWSTRING'
(为什么他如此坚持“原始”部分?),而你似乎认为它是
'\rRAWSTRING'
(让所有“原始”引用完全神秘)。感谢所有回复和更正,并对混淆表示抱歉。好的,如果我执行此“print repr(line)”,那么它返回的是:'\r设置启用确认\n'(包括单引号)。我已经尝试过上面的所有建议,比如line.startswith(r'\r')返回False,line.startswith('\\r')也一样,还有line.find(r'\r')和line.find('\\r')(find返回-1)。那么现在是时候尝试一些有效的建议了,比如
if'\r'在line:
或者
if line.startswith('\r'):
if-line,你说得对。我首先通过使用repr()打印找到了\r,所以在搜索它时,我认为需要使用repr()。
line.find('\r')
line.startswith('\r')
'\r' in line
>>> line = '\rSET ENABLE ACK\n'
>>> print repr(line)
'\rSET ENABLE ACK\n'
>>> line.find('\r')
0
>>> line.startswith('\r')
True
>>> '\r' in line
True
>>> print line
SET ENABLE ACK

>>> print repr(line)
'\rSET ENABLE ACK\n'
>>> print len(line)
16
>>> print len(repr(line))
20
>>> line = '\rSET ENABLE ACK\n'
>>> line.startswith('\r')
True
>>> '\rSET ENABLE ACK\n'.startswith('\r')
True