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

3 投票
6 回答
11907 浏览
提问于 2025-04-15 23:54

有一个字符串叫做 line,它的原始内容是这样的:

\rRAWSTRING

我想知道怎么检测里面有没有转义字符 \r?我试过的方法是:

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

但是没有成功。我还试过用 find,比如:

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。

6 个回答

1

你可以试试以下两种方法:

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

或者

if line.startswith('\r'):

后面那种方法更好:看起来你使用 repr 只是为了获取转义字符。

2

兄弟,看起来你试过了所有的方法,但最简单的办法你却没用,就是 lines.startswith('\r')

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

现在,先别用 repr()、\r 和 r'string' 这些复杂的东西,直接用最简单的方法,避免搞混。

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

撰写回答