Python中如何获取子串精确匹配的起始索引?
解决Python中精确匹配子串起始索引的问题
我懂你遇到的困扰了:用line.find("You")会返回0,因为它不管是不是独立单词,只要字符串里出现连续的"You"就会匹配,刚好开头的"Your"前三个字符就是"You";而re.findall只能返回匹配到的子串内容,没法直接拿到对应的索引。这时候我们可以用re.finditer()来解决这个问题!
具体实现方法
re.finditer()会返回一个迭代器,每个元素都是一个匹配对象,我们可以通过这个对象的start()方法直接获取子串的起始索引。代码示例如下:
import re line = "Your family and You are invited to my party" # 用原始字符串r''避免转义麻烦,\b代表正则里的单词边界,确保匹配独立单词 matches = re.finditer(r'\bYou\b', line) # 遍历所有匹配结果,输出索引 for match in matches: print(f"独立子串'You'的起始索引是: {match.start()}")
运行这段代码,就会输出独立子串'You'的起始索引是: 16,完全符合你的需求!
额外补充
\b是正则的单词边界规则,它能保证我们匹配的是独立存在的单词,不会和"Your"这类包含"You"的长单词混淆。- 如果你的字符串里有多个独立的"You",这段代码会输出所有对应的起始索引;要是只需要第一个匹配的结果,直接取第一个匹配对象即可:
first_match = next(re.finditer(r'\bYou\b', line)) print(first_match.start()) # 输出16
内容的提问来源于stack exchange,提问作者Bryce Ramgovind
相关产品推荐
相关产品推荐

