Python 如何查找字母(来自字母表)在字符串中第一次出现的位置?

Python 如何查找字母(来自字母表)在字符串中第一次出现的位置?,python,string,letter,Python,String,Letter,例如,如果字符串是 s = "##catgiraffeapluscompscI" 由于此字符串中出现的第一个字母位于位置2(c),如何将输出设置为2 我还希望它能够适用于不同的字符串(比如函数),它们的第一个字母可能不是c,所以我不希望 s.find('c') 您可以将字符串视为字符列表,并对其进行迭代,直到找到匹配项。这个while语句检查字符,如果它不存在,它会阻止您从列表的末尾掉下来 s = "##catgiraffeapluscompscI" index = 0 search_cha

例如,如果字符串是

s = "##catgiraffeapluscompscI"
由于此字符串中出现的第一个字母位于位置2(
c
),如何将输出设置为2

我还希望它能够适用于不同的字符串(比如函数),它们的第一个字母可能不是
c
,所以我不希望

s.find('c')

您可以将字符串视为字符列表,并对其进行迭代,直到找到匹配项。这个while语句检查字符,如果它不存在,它会阻止您从列表的末尾掉下来

s = "##catgiraffeapluscompscI"
index = 0
search_char = "c"

while (index != len(s)) and (s[index] != search_char):
    index += 1

if index == len(s):
    print("Character not in string")
else:
    print("Character is at position: ", index)

您可以将字符串视为字符列表,并对其进行迭代,直到找到匹配项。这个while语句检查字符,如果它不存在,它会阻止您从列表的末尾掉下来

s = "##catgiraffeapluscompscI"
index = 0
search_char = "c"

while (index != len(s)) and (s[index] != search_char):
    index += 1

if index == len(s):
    print("Character not in string")
else:
    print("Character is at position: ", index)

您可以使用正则表达式搜索第一个字母(a-z或a-z,使用
re.I
标志),如果找到,则从匹配对象返回
start
值:

import re

def first_letter(s):
    m = re.search(r'[a-z]', s, re.I)
    if m is not None:
        return m.start()
    return -1

s = "##catgiraffeapluscompscI"
i = first_letter(s)
print(i)
输出:

2
First alphabetic character c at position 2

您可以使用正则表达式搜索第一个字母(a-z或a-z,使用
re.I
标志),如果找到,则从匹配对象返回
start
值:

import re

def first_letter(s):
    m = re.search(r'[a-z]', s, re.I)
    if m is not None:
        return m.start()
    return -1

s = "##catgiraffeapluscompscI"
i = first_letter(s)
print(i)
输出:

2
First alphabetic character c at position 2

如果您不想导入正则表达式或其他模块:以下仅使用标准库,将忽略所有非字母字符,并使用isalpha()方法为您提供第一个字母字符的位置

输出:

2
First alphabetic character c at position 2

如果您不想导入正则表达式或其他模块:以下仅使用标准库,将忽略所有非字母字符,并使用isalpha()方法为您提供第一个字母字符的位置

输出:

2
First alphabetic character c at position 2

首先查找字母,然后查找其索引

>>> s.find(next(filter(str.isalpha, s)))
2

首先查找字母,然后查找其索引

>>> s.find(next(filter(str.isalpha, s)))
2

首先,尼克的回答是,我认为最好。但是正则表达式可能很难处理,我对它们不太在行,所以我倾向于远离它们,因为在我的手中它们非常脆弱

因此,值得一提的是,这里有一条不使用正则表达式的捷径:

import string
s = "##catgiraffeapluscompscI"
letters_found = [L for L in string.ascii_letters if L in s]
if letters_found:
    first_letter_position = min([s.find(L) for L in letters_found])
else:
    first_letter_position = -1
print(first_letter_position)
基本上,它会列出目标中的所有字母(如果目标中没有字母,则为空);然后为目标中存在的每个字母找到第一个位置;取其中最小的一个


不过,如果你对正则表达式感到满意,尼克的更好。

首先,尼克的答案是,我认为最好。但是正则表达式可能很难处理,我对它们不太在行,所以我倾向于远离它们,因为在我的手中它们非常脆弱

因此,值得一提的是,这里有一条不使用正则表达式的捷径:

import string
s = "##catgiraffeapluscompscI"
letters_found = [L for L in string.ascii_letters if L in s]
if letters_found:
    first_letter_position = min([s.find(L) for L in letters_found])
else:
    first_letter_position = -1
print(first_letter_position)
基本上,它会列出目标中的所有字母(如果目标中没有字母,则为空);然后为目标中存在的每个字母找到第一个位置;取其中最小的一个



但是,如果你对正则表达式感到满意,Nick的更好。

你能指定字母的组成部分吗?字母表中的字母哪个字母表中的字母?你能指定字母的组成部分吗?字母表中的字母哪个字母表中的字母?使用代码回溯时出现此错误(最后一次调用):文件“main.py”,第9行,在i=first_字母文件“main.py”中,第2行,在first_字母m=re.search(r'[a-z]',s,re.i)中。名称错误:未定义名称“re”@JohnMaterum刚刚意识到我的答案中的
import re
格式不正确。您需要将其包含在regex(
re
)模块中。请参阅我的编辑在使用代码回溯(最近一次调用)时获取此错误:文件“main.py”,第9行,在i=first_字母文件“main.py”中,第2行,在first_字母m=re.search(r'[a-z]',s,re.i)name错误:未定义名称“re”@JohnMaterum刚刚意识到我的答案中的
导入re
格式不好。你需要将其包含在正则表达式中(
re
)模块。请参阅我的编辑。这仅在您已经知道第一个字母是什么的情况下才有效。如果未找到子字符串,您可以使用异常处理返回None。如果您只关心查找子字符串,而不是使用单独的库,这是理想的选择。但是如果您想使用基于Au理论的高级模式匹配tomata,那么RE可能是关注的领域。这不是处理未找到的问题,而是它没有解决问题。这个答案返回字母“c”的第一个位置;OP询问任何字母的第一个位置。例如,如果s设置为“###snacktime”,正确的值是3(字母“s”的位置);此处发布的代码将返回6(“c”的位置).现在可以了吗?codingatty.同样的逻辑,OP应该只在函数体中写入它。不;同样的问题。您找到的是第一个“c”,而不是第一个字母。这只有在您已经知道第一个字母是什么的情况下才有效。如果找不到子字符串,您可以使用异常处理返回None。而不是使用单独的库,而是如果您只关心查找子字符串,is是理想的选择。但是如果您想使用基于自动机理论的高级模式匹配,则RE可能是您关心的领域。这不是处理未找到的问题,而是它没有解决问题。此答案返回字母“c”的第一个位置;OP如下所示king表示任何字母的第一个位置。例如,如果s设置为“#####snacktime”,则正确的值为3(s的位置);此处发布的代码将返回6(c的位置).现在可以了吗?codingatty.同样的逻辑,OP应该写在函数体中。不;同样的问题。你找到的是第一个字母“c”,而不是第一个字母。