[英]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.