Python:找到第一个不匹配的字符

Zau*_*sus 8 python string

在Python下,当您想要获取列表中第一次出现的子字符串或字符的索引时,您可以使用以下内容:

s.find("f")
Run Code Online (Sandbox Code Playgroud)

但是,我想找到字符串中第一个不匹配的字符的索引.目前,我正在使用以下内容:

iNum = 0
for i, c in enumerate(line):
  if(c != mark):
    iNum = i
    break
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法来做到这一点,比如我不知道的内置函数?

And*_*ark 9

您可以使用正则表达式,例如:

>>> import re
>>> re.search(r'[^f]', 'ffffooooooooo').start()
4
Run Code Online (Sandbox Code Playgroud)

[^f]将匹配除了for之外的任何字符f,start()Match对象的方法(返回者re.search())将给出匹配发生的索引.

为了确保你也可以处理只包含f你想要检查的空字符串或字符串,以确保结果re.search()不是None,如果正则表达式无法匹配将会发生.例如:

first_index = -1
match = re.search(r'[^f]', line)
if match:
    first_index = match.start()
Run Code Online (Sandbox Code Playgroud)

如果您不想使用正则表达式,那么您将不会比当前的方法做得更好.你可以使用类似的东西next(i for i, c in enumerate(line) if c != mark),但你需要用一个tryexcept StopIteration块来包装它来处理只包含mark字符的空行或行.

  • 我曾想避免使用正则表达式,因为与手动检查相比,它有时性能较差。使用正则表达式的性能比我已经使用的方法稍慢(在 10,000,000 次迭代的循环中长 1 秒),而在相同的迭代次数中使用 next() 方法需要长 4-5 秒。所以,是的,你是对的:我不会比我目前的方法做得更好。 (2认同)