我是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"
答案 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
用于空格字符)中的内容