返回字符串中单词位置的函数

时间:2017-07-15 20:34:57

标签: python string

我正在编写一个带有两个参数的函数:search stringtarget string。该函数将在目标字符串中查找搜索字符串,并返回一个字符串,表示搜索字符串在目标字符串中的位置。

例如,如果目标字符串为target_string = "Georgia Tech"search_string = "Georgia",则应返回字符串"Beginning"。如果搜索字符串为"gia",则应返回"Middle",如果搜索字符串为"Tech",则应返回"结束"

代码:

def string_finder(target_string, search_string):    
    len_search = int(len(search_string))
    len_target = int(len(target_string))

    if search_string in target_string:
        if target_string.find(search_string)<=len_search: 
            return "Beginning"        
        elif #***missing statement:***            
            return "Middle"        
        elif target_string.find(search_string, -len_search):            

            return "End"
    else:        
        return "Not found"

代码似乎现在正常工作,但我无法确定应该满足哪些条件才能确定搜索字符串位于目标字符串的中间。

我的猜测是声明应如下所示:

target_string.find(search_string, len_str, len_dif ):

其中len_dif是search_string和目标字符串长度之间的差异。通过这样做,它打印正确的答案,但弄乱了最后的elif。所以,如果我运行以下代码

print(string_finder("Georgia Tech", "Georgia"))
print(string_finder("Georgia Tech", "gia"))
print(string_finder("Georgia Tech", "Tech"))
print(string_finder("Georgia Tech", "Nothing"))

而不是打印&#34;开始&#34; ,&#34;中&#34; ,&#34;结束&#34;和#34;未找到&#34;它打印&#34;开始&#34; ,&#34;中&#34; ,&#34;中&#34;和#34;未找到&#34;

5 个答案:

答案 0 :(得分:1)

"End"的正确条件是查看是否s1.find(s2) + len(s2) == len(s1)

In [660]: def string_finder(s1, s2):
     ...:     i = s1.find(s2)
     ...:     if i == 0: 
     ...:         return "Beginning"
     ...:
     ...:     elif i > 0:
     ...:         if i + len(s2) == len(s1): 
     ...:             return "End"
     ...:         else: 
     ...:             return "Middle"
     ...:
     ...:     else:
     ...:         return "Not Found"
     ...:     

In [661]: string_finder("Georgia Tech", "Georgia")
     ...: string_finder("Georgia Tech", "gia")
     ...: string_finder("Georgia Tech", "Tech")
     ...: string_finder("Georgia Tech", "Nothing")
     ...: 
Beginning
Middle
End
Not Found

答案 1 :(得分:0)

您可以尝试这样的事情:

s = "Georgia Tech"

target = "Georgia"

if target in s.split():
    the_index = s.split().index(target)

    if the_index == len(s.split())-1:
       print "end"

    elif the_index == 0:
        print "Beginning"

else:

    the_index = s.index(target)

    if the_index > 0 and the_index < len(s) -1:
       print "middle"

    elif the_index == 0:
       print "Beginning"

    elif the_index == len(s)-2:
        print "end"

输出:

 Beginning

答案 2 :(得分:0)

您的代码确认搜索字符串位于目标字符串中。没关系。唯一的问题是你将返回一个结果字符串的情况。

我建议您计算字符串一次的位置,然后在其余代码中使用该数字:

pos = target_string.find(search_string)

if pos < len_search:
    return "Beginning"

接下来,您不清楚检查的“中间”部分使用什么条件。那也没关系。通常情况下,当我不清楚这样的事情时,我只是让它成为“其余的”或“默认的”。

当您执行if / elif类型构造时,“默认值”是else:块:

elif pos >= len_target - 2 * len_search:
    return "End"
else:
    return "Middle"

请注意,当搜索字符串在结尾处“完全”时,str.find()的结果将是搜索字符串 start 的位置,即{ {1}}。如果你想在“结束”结果中有任何“模糊”,你将不得不允许一些额外的。我选择使用len_target - len_search,因为它与您在开始时的津贴相符。

答案 3 :(得分:0)

我发现以下代码相当清楚:

from __future__ import print_function

target_string = "Georgia Tech"

for search_string in ("Georgia", "gia", "Tech", "bla"):
    print("Result of searching for %s in %s: " % (search_string, target_string),
           end="")
    if target_string.startswith(search_string):
        print("Beginning")
    elif target_string.endswith(search_string):
        print("End")
    elif target_string.find(search_string) != -1:
        print("Middle")
    else:
        print("Absent")

给出:

Result of searching for Georgia in Georgia Tech: Beginning
Result of searching for gia in Georgia Tech: Middle
Result of searching for Tech in Georgia Tech: End
Result of searching for bla in Georgia Tech: Absent

答案 4 :(得分:-1)

不要重新发明轮子。 Python有一些有用的字符串方法:

if target_string.startswith(search_string):
  return 'Beginning'
elif target_string.endswith(search_string):
  return 'End'
elif target_string in search_string):
  return 'Middle'
else return 'Not Found'