Python - 返回与子字符串完全匹配的起始索引

时间:2018-01-20 09:34:08

标签: python string substring

当与子字符串完全匹配时,我需要找到字符串的起始索引。

public static Map<String, List<Integer>> fizzBuzz(int n) {
    Map<String, List<Integer>> map = new HashMap<>();
    List<Integer> fizz = new ArrayList<>(), //
            buzz = new ArrayList<>(), //
            fizzbuzz = new ArrayList<>();
    IntStream.rangeClosed(1, n).forEachOrdered(i -> {
        boolean f = i % 3 == 0, b = i % 5 == 0;
        if (f && b) {
            fizzbuzz.add(i);
        } else if (f) {
            fizz.add(i);
        } else if (b) {
            buzz.add(i);
        }
    });
    map.put("Fizz", fizz);
    map.put("Buzz", buzz);
    map.put("FizzBuzz", fizzbuzz);
    return map;
}

我想找到line = "Your family and You are invited to my party" 的起始索引,即。 16

我试过了

You

但是返回line.find("You")

然后我试过了,

0

但它返回一个包含子字符串的列表

import re
print(re.findall('\\bYou\\b', line))

3 个答案:

答案 0 :(得分:1)

使用re.search获取您的模式的适当位置。 例如:

import re
line = "Your family and You are invited to my party"
res = re.search('\\bYou\\b', line)

它给出的结果看起来像

  

&lt; _sre.SRE_Match对象; span =(16,19),match ='你'&gt;

然后

beg, end = res.span()

其中变量beg存储所需的索引。

答案 1 :(得分:1)

这应该可行

import re
line = "Your family and You are invited to my party"
re.search('\\bYou\\b', line).start() 

获取确切的索引

答案 2 :(得分:1)

如果您使用正则表达式,那么this answer应解决您的问题。

将其应用于您的问题。我们得到

import re
a = re.search(r'\b(you)\b', 'Your family and you are invited to the party')
print a.start()

给出了16

这是否适用于&#34;你&#34;?的所有可能位置? (开始,中间和结束)?我们来检查一下

str1 = "you hi"
str2 = "hi you"
str3 = "hi you hi"
re.search(r'\b(you)\b', str1).start()
# output is 0
re.search(r'\b(you)\b', str2).start()
# output is 3
re.search(r'\b(you)\b', str3).start()
# output is 3

更新1:不区分大小写的匹配

如果您想要不区分大小写的匹配,请使用re.IGNORECASE这样的

re.search(r'\b(you)\b', str3, re.IGNORECASE).start()

更新2:在正则表达式中传递变量而不是硬编码字符串

str = "Your family and you are invited to the party"
word_to_search = "you"
re_string = r"\b({})\b".format(word_to_search)
re.search(re_string, str).start()
#output is 16