簡體   English   中英

如何檢測字符串中的轉義序列

[英]how to detect an escape sequence in a string

給定一個名為line的字符串,其原始版本具有以下值:

\rRAWSTRING

如何檢測它是否具有轉義字符\\ r? 我試過的是:

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

如果:

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

伙計,似乎你已經嘗試了除了最簡單的東西lines.startswith('\\r')所有東西, lines.startswith('\\r')

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

現在,繼續使用repr(),\\ r和r'string'並使用最簡單的方法來避免混淆。

您可以嘗試:

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

要么

if line.startswith('\r'):

后者更好:看起來你只是使用repr來獲得逃脫的角色。

你問的問題並不完全清楚。 你說的是一個字符串,但也是一個“原始版本”,你的字符串包含“RAWSTRING”,這似乎暗示你在談論原始字符串。

這些都不是完全相同的。

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

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

如果您定義了一個實際的 “原始字符串”,那將無效,因為您輸入的不是'\\ r'字符,而是兩個字符'\\'和'r':

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

在這種情況下,或者在普通字符串恰好具有字符'\\'和'r'的情況下,並且您想要找到這兩個字符,您需要使用原始字符串進行搜索:

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

或者您可以通過轉義反斜杠本身來搜索序列:

>>> r"\rastring".find('\\r')
0
>>> 
if '\r' in line:

如果這不是您的意思,請盡可能地告訴我們什么是line 做這個:

print repr(line)

並將結果復制/過去編輯您的問題。

重新你的主題:反斜杠是一個轉義字符,“\\ r”是一個轉義字符。

最簡單的:

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

除非我嚴重誤解了你所說的內容,否則你需要尋找r'\\r' (或等效但可能有點不太可讀, '\\\\r' ),轉義序列而不是 '\\r' ,回車字符本身。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM