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'
,它就不起作用了。在这种情况下,有没有解决方案?