搜索不同字符的索引

时间:2019-06-24 07:25:53

标签: python python-3.x

我是Python的新手,我正在尝试在给定字符列表的情况下获取字符的第一个实例的索引

我尝试过:

first_char = line.index('&')                   
second_char = line.find(" ",first_char) or line.find("(",first_char) or line.find(";",first_char)
print(line[first_char:second_char])

在某些情况下它不起作用,因为我每行只能得到一个字符。 我知道我可以使用IF和Elses来构建某些东西,但是对于我想像的非常简单的东西来说似乎有点复杂。

示例:

Text --> " left join &lib_prefix.abcd( "

Result "&lib_prefix.abcd"

Text --> " left join &lib_prefix.abcd "

Result "&lib_prefix.abcd"

Text --> " left join &lib_prefix.abcd; "

Result "&lib_prefix.abcd"

Text --> " left join &lib_prefix.abcd;( "

Result "&lib_prefix.abcd"

1 个答案:

答案 0 :(得分:0)

我认为这可能是错误的方法。 index()找到索引或抛出ValueError: substring not found。另一方面,find()查找索引或返回-1。因此,这两种模式都不起作用:

second_char = line.find(" ",first_char) or line.find("(",first_char) or line.find(";",first_char)

...除非找到第一件事-在这种情况下为空格。如果找不到它,则返回-1(如果您使用find(),则返回错误。

要提取该子字符串,最好使用正则表达式。像这样:

import re

line = " left join &lib_prefix.abcd;("
found = re.search(r'\&.*?(?=[\s(;])', line)
if found:
    print(found[0])
else:
    print("not found")
# prints &lib_prefix.abcd

正则表达式基本上说:

  • 查找和与号\&(由于\意味着要进行正则表达式,因此必须与&一起转义)。

  • 后跟任何字符.*? 遵循您的字符集(?=[\s(;])\s用于空格字符)中的内容