当与子字符串完全匹配时,我需要找到字符串的起始索引。
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))
答案 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