Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 让单词围绕一个给定的位置_Python_String - Fatal编程技术网

Python 让单词围绕一个给定的位置

Python 让单词围绕一个给定的位置,python,string,Python,String,让 如何在位置i周围找到单词?在我的示例中,即blablbalba 我在想这件事,但似乎不太和谐: s = 'hello you blablablbalba qyosud' i = 17 枚举中的j,c的: 如果c='': 如果j

如何在位置
i
周围找到单词?
在我的示例中,即
blablbalba


我在想这件事,但似乎不太和谐:

s = 'hello you blablablbalba qyosud'
i = 17
枚举中的j,c的
:
如果c='':
如果j
您可以按空格分割单词,然后计算空格数,直到阈值参数(
i
)出现,这将是分割列表中项目的索引

解决方案:

def func(s, i):
    s1 = s[0:i]
    k = s1.rfind(' ')
    pos1 = k
    s1 = s[k+1:len(s)]
    k = s1.find(' ')
    k = s[pos1+1:pos1+k+1]
    return k

s = 'hello you blablablbalba qyosud'
i = 17
k = func(s, i)
print(k)
output:
blablablbalba 
print (s.split()[" ".join(s[:i].split()).count(" ")])
编辑:

def func(s, i):
    s1 = s[0:i]
    k = s1.rfind(' ')
    pos1 = k
    s1 = s[k+1:len(s)]
    k = s1.find(' ')
    k = s[pos1+1:pos1+k+1]
    return k

s = 'hello you blablablbalba qyosud'
i = 17
k = func(s, i)
print(k)
output:
blablablbalba 
print (s.split()[" ".join(s[:i].split()).count(" ")])

如果单词之间有一个以上的空间,我们要考虑两个空间(或更多)作为一个空间,我们可以这样做:

print (s.split()[s[:i].count(" ")])
输出:

def func(s, i):
    s1 = s[0:i]
    k = s1.rfind(' ')
    pos1 = k
    s1 = s[k+1:len(s)]
    k = s1.find(' ')
    k = s[pos1+1:pos1+k+1]
    return k

s = 'hello you blablablbalba qyosud'
i = 17
k = func(s, i)
print(k)
output:
blablablbalba 
print (s.split()[" ".join(s[:i].split()).count(" ")])
说明:

def func(s, i):
    s1 = s[0:i]
    k = s1.rfind(' ')
    pos1 = k
    s1 = s[k+1:len(s)]
    k = s1.find(' ')
    k = s[pos1+1:pos1+k+1]
    return k

s = 'hello you blablablbalba qyosud'
i = 17
k = func(s, i)
print(k)
output:
blablablbalba 
print (s.split()[" ".join(s[:i].split()).count(" ")])
这个返回值是2,因为在17索引之前有两个空格

blablablbalba
此返回是按空格分隔的列表

s[:i].count(" ") # return's 2 
您需要的是相关项目的索引,它是从
s[:i].count(“”)中获得的


要回答你的第一个问题

p=s[0:i].rfind(“”)

关于你的第二个问题

s[p+1:(s[p+1:.查找('')+p+1)]

说明

  • 将字符串从起始位置提取到第i个位置

  • 查找上次出现的空格的索引。这将是你所需单词的起点(第二个问题)

  • 从这里转到下一个出现的空格,并提取中间的单词
  • 以下合并代码应适用于所有场景:

    Output: 'blablablbalba'
    
    您可以使用搜索以前的空白,包括
    s[i]

    s = s + ' '
    p = s[0 : i].rfind(' ') 
    s[ p + 1 : (s[p + 1 : ].find(' ') + p + 1) ]
    
    >>> s = 'hello you blablablbalba qyosud'
    >>> i = 17
    >>> start = s.rfind(' ', 0, i + 1)
    >>> start
    9
    
    然后您可以使用再次搜索以下空白,包括
    s[i]

    s = s + ' '
    p = s[0 : i].rfind(' ') 
    s[ p + 1 : (s[p + 1 : ].find(' ') + p + 1) ]
    
    >>> s = 'hello you blablablbalba qyosud'
    >>> i = 17
    >>> start = s.rfind(' ', 0, i + 1)
    >>> start
    9
    
    最后使用slice生成单词:

    >>> end = s.find(' ', i)
    >>> end
    23
    

    如果
    s[i]
    不是空格,则上述结果将导致出现该单词。如果
    s[i]
    是空白,则结果是空字符串。

    这里是另一种使用regex的简单方法

    >>> s[start+1:(end if end != -1 else None)]
    'blablablbalba'
    

    更新:上一个模式在有空间时失败。目前的模式处理它

    您可以使用
    索引
    查找
    从精确位置开始获取
    空间
    的索引。在这种情况下,它将查找从
    start+1
    开始的
    空格
    字符位置。然后,如果找到任何空格,它将打印出两个索引
    start
    end

    import re
    s = 'hello you blablablbalba qyosud'
    i = 17
    string_at_i = re.findall(r"(\w+)", s[i:])[0]
    print(re.findall(r"\w*%s\w*" % string_at_i, s))
    

    输出:“blablbalba”

    从s中的第i个元素向后开始如何;在向后移动时存储所有内容,直到遇到空白;然后反向打印存储的字符串。非常好的解决方案@Basj,谢谢:)如果
    s='hello you blablbalba'
    ,它就不起作用了。在这种情况下,有没有解决方案?