如何在python字符串中查找非ASCII字符的索引?

如何在python字符串中查找非ASCII字符的索引?,python,regex,string,search,range,Python,Regex,String,Search,Range,Python有string.find()和string.rfind()来获取字符串中子字符串的索引 并重新搜索(regex,string)以获取字符串中子字符串的“第一个索引”。但是,此函数是返回匹配对象:( 所以我想,合并这两个函数。通过正则表达式检查字符串并返回第一个索引。(索引与对象类型不匹配:b) 例如: string = "abcdeÿÿaaaabbbÿÿcccdddÿÿeeeÿÿ" print custom(string) 结果: >>> 5 非ASCII范围为

Python有string.find()和string.rfind()来获取字符串中子字符串的索引

并重新搜索(regex,string)以获取字符串中子字符串的“第一个索引”。但是,此函数是返回匹配对象:(

所以我想,合并这两个函数。通过正则表达式检查字符串并返回第一个索引。(索引与对象类型不匹配:b)

例如:

string = "abcdeÿÿaaaabbbÿÿcccdddÿÿeeeÿÿ"
print custom(string)
结果:

>>> 5

非ASCII范围为[^\x20-\x7E],如何实现此函数???

如果要使用此2函数,请在
查找中使用第一组
重新搜索

>>> g = "abcdeÿÿaaaabbbÿÿcccdddÿÿeeeÿÿ"
>>> import re
>>> g.find(re.search(r'[^\x20-\x7E]',g).group(0))
5
但是,如果您只想查找索引
re.search
具有返回匹配字符串索引的
start
方法:

>>> re.search(r'[^\x20-\x7E]',g).start()
5 
您也可以在不使用正则表达式的情况下执行此操作:

>>> import string
>>> next(i for i,j in enumerate(g) if j not in string.ascii_letters)
5
“MatchObjects”有一个可以使用的方法:

import re

def custom(s):
    mat = re.search(r'[^\x20-\x7E]', s)
    if mat: return mat.start()
    return -1  # ?? match failed

string = "abcdeÿÿaaaabbbÿÿcccdddÿÿeeeÿÿ"
print(custom(string))  # 5