Python:如何忽略' substring not found'错误

时间:2014-04-06 03:18:03

标签: python string substring

我们假设您有一个字符串数组' x',包含非常长的字符串,并且您想要搜索以下子字符串:" string。 str",在数组x中的每个字符串中。

x元素的绝大多数中,所讨论的子字符串将位于数组元素中。然而,也许一两次,它不会成功。如果不是,那么......

1)有没有办法忽略这个案例,然后使用x语句转到if的下一个元素?

2)如果你有if的任何特定元素中有许多不同的子串,那么有没有x语句的方法可以做到这一点你最终可能会写出大量的if陈述?

4 个答案:

答案 0 :(得分:3)

您想要tryexcept阻止。这是一个简化的例子:

a = 'hello'
try:
    print a[6:]
except:
    pass

扩展示例:

a = ['hello', 'hi', 'hey', 'nice']
for i in a:
    try:
        print i[3:]
    except:
        pass

lo
e

答案 1 :(得分:1)

您可以使用list comprehension简洁地过滤列表:

按长度过滤:

a_list = ["1234", "12345", "123456", "123"]
print [elem[3:] for elem in a_list if len(elem) > 3]
>>> ['4', '45', '456']

按子字符串过滤:

a_list = ["1234", "12345", "123456", "123"]
a_substring = "456"
print [elem for elem in a_list if a_substring in elem]
>>> ['123456']

通过多个子字符串过滤(通过比较filtered数组大小和子字符串数来检查所有子字符串是否在元素中):

a_list = ["1234", "12345", "123456", "123", "56", "23"]
substrings = ["56","23"]
print [elem for elem in a_list if\
             len(filter(lambda x: x in elem, substrings)) == len(substrings)]
>>> ['123456']

答案 2 :(得分:0)

好吧,如果我理解你写的是什么,你可以使用continue关键字跳转到数组中的下一个元素。

elements = ["Victor", "Victor123", "Abcdefgh", "123456", "1234"]
astring = "Victor"

for element in elements:
  if astring in element:
    # do stuff
  else:
   continue # this is useless, but do what you want, buy without it the code works fine too.

抱歉我的英文。

答案 3 :(得分:0)

使用any()查看是否有任何子字符串位于x的项目中。 any()将使用生成器表达式并显示短路 beavior - 它将返回True第一个表达式,其值为True并停止消耗发电机。

>>> substrings = ['list', 'of', 'sub', 'strings']
>>> x = ['list one', 'twofer', 'foo sub', 'two dollar pints', 'yard of hoppy poppy']
>>> for item in x:
    if any(sub in item.split() for sub in substrings):
        print item


list one
foo sub
yard of hoppy poppy
>>>