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

时间:2010-06-13 01:52:49

标签: python parsing string escaping

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

\rRAWSTRING

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

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

但它没有抓住它。我也试过找,例如:

if repr(line).find('\r') != -1:
    blah

也不起作用。我错过了什么?

THX!

修改

感谢所有的回复和更正,以及混淆。

好的,如果我这样做

print repr(line)

然后打印的是:

'\rSET ENABLE ACK\n'

(包括单引号)。我已经尝试了所有的建议,包括:

line.startswith(r'\r')
line.startswith('\\r') 

每个都返回False。也尝试过:

line.find(r'\r')
line.find('\\r')

每个都返回-1

6 个答案:

答案 0 :(得分:4)

如果:

print repr(line)

返回:

'\rSET ENABLE ACK\n'

然后:

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

repr()返回显示字符串。它实际上包含您在打印行时看到的引号和反斜杠:

>>> print line
SET ENABLE ACK

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

答案 1 :(得分:2)

老兄,你似乎已经尝试了除了最简单的事情之外的一切,lines.startswith('\r')

>>> line = '\rSET ENABLE ACK\n'
>>> line.startswith('\r')
True
>>> '\rSET ENABLE ACK\n'.startswith('\r')
True

现在,继续使用repr(),\ r和r'string'并使用最简单的方法来避免混淆。

答案 2 :(得分:1)

你可以尝试:

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

if line.startswith('\r'):

后者更好:看起来你只是使用repr来获取转义角色。

答案 3 :(得分:0)

你所要求的并不完全清楚。你说的是一个字符串,但也是一个“原始版本”,你的字符串包含“RAWSTRING”,这似乎意味着你在谈论原始字符串。

这些都不是完全相同的。

如果你有一个普通的字符串,其中包含'\ _'字符,那么你可以使用任何普通的方法来匹配:

>>> "\rastring".find('\r')
0
>>> 

如果您定义了一个实际“原始字符串”,那将无效,因为您放入的不是'\ r'字符,而是两个字符'\'和'r' :

>>> r"\rastring".find('\r')
-1
>>>

在这种情况下,或者在普通字符串碰巧有'\'和'r'字符的情况下,如果要找到这两个字符,则需要使用原始字符串进行搜索:< / p>

>>> r"\rastring".find(r'\r')
0
>>> 

或者你可以通过转义反斜杠来搜索序列:

>>> r"\rastring".find('\\r')
0
>>> 

答案 4 :(得分:0)

if '\r' in line:

如果这不是您的意思,请尽快告诉我们line中的内容。这样做:

print repr(line)

并将结果复制/过去编辑您的问题。

重新开始你的主题:反斜杠是一个转义字符,“\ r”是一个转义字符。

答案 5 :(得分:0)

最简单的:

>>> s = r'\rRAWSTRING'
>>> s.startswith(r'\r')
True

除非我严重误解你所说的内容,否则你需要寻找r'\r'(或等效但可能稍微不那么可读,'\\r'),escape 序列'\r',,回车符本身。