我有這個字串:
myString = "Tomorrow will be very very rainy"
我想獲得第 5 個單詞的起始索引(非常)。
我目前所做的,我確實將 myString 拆分為單詞:
words = re.findall( r'\w |[^\s\w] ', myString)
但我不確定如何獲取第 5 個單詞的起始索引:words[5]。
使用 index() 不起作用,因為它找到了第一次出現:
start_index = myString.index(words[5])
uj5u.com熱心網友回復:
不是很優雅,而是遍歷拆分詞串列并根據詞長和拆分字符(在本例中為空格)計算索引。此答案將針對句子中的第五個單詞。
myString = "Tomorrow will be very very rainy"
target_word = 5
split_string = myString.split()
idx_start = 0
for i in range(target_word-1):
idx_start = len(split_string[i])
if myString[idx_start] == " ":
idx_start = 1
idx_end = idx_start len(split_string[target_word-1]) 1
print(idx_start, idx_end, myString[idx_start:idx_end])
uj5u.com熱心網友回復:
wordnum = 5
l = [x.span()[1] for x in re.finditer(" ", string)]
pos = l[wordnum-2]
print(pos)
輸出
22
uj5u.com熱心網友回復:
如果單詞之間只有一個空格:
- 將所需單詞之前的所有單詞長度相加
- 添加空格數
word_idx = 4 # zero based index
words = myString.split()
start_index = sum(len(word) for word in words[:word_idx]) word_idx
結果:
22
uj5u.com熱心網友回復:
如果字串以 5 個單詞開頭,則可以匹配前 4 個單詞并捕獲第五個單詞。
您可以使用該start方法并將 1 傳遞給Match Object的第一個捕獲組。
^(?:\w \s ){4}(\w )
解釋
^字串的開始(?:\w \s ){4}重復 4 次匹配 1 個單詞字符和 1 個空白字符(\w )捕獲組 1,匹配 1 個單詞字符
例子
import re
myString = "Tomorrow will be very very rainy"
pattern = r"^(?:\w \s ){4}(\w )"
m = re.match(pattern, myString)
if m:
print(m.start(1))
輸出
22
對于更廣泛的匹配,您可以使用\S 匹配一個或多個非空白字符。
pattern = r"^(?:\S \s ){4}(\S )"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473899.html
