我正在使用以下代碼來連接2個字母的縮寫、名字和姓氏--這樣,每3個字就成為一個短語。然而,在有些情況下,名字中包含一個 "Jr",就像下面的字串樣本一樣,因此破壞了這個本來可以作業的串列的理解力。
span = 3.
#string sample
words = words = ['QB'/span>, 'Teddy'/span>, 'Bridgewater'/span>,'RB'/span>, 'Dalvin', 'Cook', 'WR', 'Keenan', 'Allen', 'TE', 'Dalton', 'Schultz', 'WR', 'Odell', 'Beckham', 'Jr']
item= [" ". join(words[i:i span]) for i in range(0,len( words), span) ]
在這種情況下,當 "Jr. "是第4個詞時,是否有辦法有條件地加入到4的跨度中? 我目前得到的是:
['QB Teddy Bridgewater', 'RB Dalvin Cook', 'WR Keenan Allen', 'TE Dalton Schultz', 'WR Odell Beckham', 'Jr']
但預期輸出應該是:
['QB Teddy Bridgewater'/span>, 'RB Dalvin Cook'/span>, 'WR Keenan Allen'/span>, 'TE Dalton Schultz'/span>, 'WR Odell Beckham Jr'/span>]
uj5u.com熱心網友回復:
一種解決方案是使用正則運算式:
import re
print(list(re.findall(r"([A-Z]{2}. ?)s*(?=[A-Z]{2}|)"/span>, ".join( words)))))
印刷品:
['QB Teddy Bridgewater', 'RB Dalvin Cook'。'WR Keenan Allen'/span>, 'TE Dalton Schultz'/span>, 'WR Odell Beckham Jr'/span>]
uj5u.com熱心網友回復:
假設每個組以大寫字母縮寫開始,你可以把所有的字串連接在一起,在縮寫前加行尾,其他的加空格。 然后在行末分割產生的字串,并洗掉第一個(空)條目。
words = ['QB'/span>, 'Teddy'/span>, 'Bridgewater'/span>, 'RB', 'Dalvin', 'Cook', 'WR'。'Keenan', 'Allen', 'TE', 'Dalton', 'Schultz', 'WR', 'Odell', 'Beckham', 'Jr']
items = "".join("
"[s[:2]==s.upper()] s for s in words).split("
"/span>)[1:]
print( items)
['QB Teddy Bridgewater', 'RB Dalvin Cook', 'WR Keenan Allen', 'TE Dalton Schultz', 'WR Odell Beckham Jr']
如果縮寫串列是已知的,最好用集合中的成員資格來替換[s[:2]==s.upper()]/code>。[s in {'QB', 'RB', 'WR', 'TE'}](你應該把這個集合放在一個單獨的變數中)
如果你不介意使用一個庫,你可以使用一個正則運算式來替換行末的空格,更簡潔地完成同樣的事情:
items = re.sub(r" ( ?=[A-Z]{2} )","
"," ".join(words)).split("
")
這可能有些不可靠,因為任何包含兩個字母大寫的單詞的名字都會導致不適當的分割(例如,["RB", "OJ", "Simpson"])。有了一個已知的縮寫串列,就可以通過將它們放在模式中來避免這種情況:
items = re.sub(r" (?=(QB|RB|WR|TE) ) ","
"," ".join(words)).split("
")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320164.html
標籤:
下一篇:在Python中為詞組添加前綴
