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

4

Python有string.find()和string.rfind()方法,可以获取字符串中子串的索引。

而re.search(regex,string)方法可以获取字符串中子串的“第一个索引”,但是该函数返回的是匹配对象 :(

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

例如:

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

结果:

>>> 5

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

2个回答

5
如果您想使用这两个功能,请在find中使用第一组re.search
>>> 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

2
"MatchObjects"有一个可以使用的"start"方法:start
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接