簡體   English   中英

如何在有約束的python中切片特定字符?

[英]how to slice specific characters in python with constraints?

str="class computer :"
name=str[str.find("class"):str.find(":")]
print name

上面的代碼必須將結果輸出為我得到的" computer " ,即"class computer" 可能是什么錯誤?

一旦找到.find('class') ,就需要使該索引偏移字符串'class'本身的長度。

>>> s = 'class computer :'
>>> s[s.find('class')+len('class'):s.find(':')]
' computer '

您可以丟下一條strip以刪除開頭和結尾的空格

>>> s[s.find("class")+len('class'):s.find(":")].strip()
'computer'

str.find返回第一個出現的字符匹配項的索引,因此返回0

>>> s.find('class')
0

來自文檔

返回找到子字符串sub的字符串中的最低索引

因此,您需要使用len函數添加find字符串的長度以獲取正確的輸出

>>> name=s[s.find("class")+len('class'):s.find(":")]
>>> print name
 computer 

注意-您不應將str用作變量,因為它會掩蓋內置功能

如果您在class中有其他單詞,則查找將失敗,您可以使用帶有單詞邊界的正則表達式來查找單詞class的完全匹配class

import  re

print(re.findall(r"(?<=\bclass\b)\s+\w+\s+",s))

您可以看到一個示例,該示例將如何失敗:

In [9]: s = "subclass class computer :"

In [10]: s[s.find('class')+len('class'):s.find(':')]
Out[10]: ' class computer '

In [11]: re.findall(r"(?<=\bclass\b)\s+\w+\s+",s)
Out[11]: [' computer ']

如果您的字符串中有多個class ,則可以在lookbehind斷言中使用lookahead:

 s = "subclass class tv class computer :"
 print(re.findall(r"(?<=\bclass\b)\s+\w+\s+(?=:)",s))

 [' computer ']

暫無
暫無

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

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