繁体   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