我有一段文字
original = '3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 US NC'
我需要找到我們并把它放在最后:像這樣
lookup= 'US'
result = original.replace(lookup,"") " " str(lookup)
輸出:3200 NORTHLINE AVE STE 360GREENSBORO27408-7611 NC US
但是,如果我將查找作為如下串列怎么辦:
lookup = ['US','CA','INDIA','CHINA']
和多個輸入,如下所示:
input = ['3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 US NC','200 LINE AVE STE 360 GBORO 77611 CA NC','60 Indiranagar INDIA Bangalore']
我需要為每個輸入串列找到國家并將其放在每個串列的字串末尾。
我嘗試了很多方法,但都做不到。對你的幫助表示感謝。
謝謝
uj5u.com熱心網友回復:
您可以首先將字串分解為標記:
>>> address = '3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 US NC'
>>> tokens = address.split()
>>> tokens
['3200', 'NORTHLINE', 'AVE', 'STE', '360', 'GREENSBORO', '27408-7611', 'US', 'NC']
如果您想在最后放置國家代碼,您可以使用key排序值對標記串列進行排序。例子:
>>> sorted_tokens = sorted(tokens, key=lambda token: token == "US")
>>> sorted_tokens
['3200', 'NORTHLINE', 'AVE', 'STE', '360', 'GREENSBORO', '27408-7611', 'NC', 'US']
要將其放回字串中,您可以使用連接
>>> sorted_address = ' '.join(sorted_tokens)
>>> sorted_address
3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 NC US
要使其適用于各種國家/地區代碼,您只需稍微修改key
lookup = ['US','CA','INDIA','CHINA']
sorted_tokens = sorted(tokens, key=lambda token: token in lookup)
總而言之:
lookup = ['US','CA','INDIA','CHINA']
adresses = [
'3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 US NC',
'200 LINE AVE STE 360 GBORO 77611 CA NC',
'60 Indiranagar INDIA Bangalore',
]
def sort_address(address):
tokens = address.split()
sorted_tokens = sorted(tokens, key=lambda token: token in lookup)
return ' '.join(sorted_tokens)
for address in adresses:
print(sort_address(address))
3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 NC US
200 LINE AVE STE 360 GBORO 77611 NC CA
60 Indiranagar Bangalore INDIA
uj5u.com熱心網友回復:
我們可以使用正則運算式替換方法,如下所示:
lookup = ['US', 'CA', 'INDIA', 'CHINA']
regex = r'\s (' r'|'.join(lookup) r')(.*)'
df["address"] = df["address"].str.replace(regex, r'\2 \1', regex=True)
假設您使用的是常規 Python 串列,而不是資料框,我們可以嘗試類似的方法:
lookup = ['US', 'CA', 'INDIA', 'CHINA']
regex = r'\s (' r'|'.join(lookup) r')(.*)'
inp = ['3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 US NC','200 LINE AVE STE 360 GBORO 77611 CA NC','60 Indiranagar INDIA Bangalore']
output = [re.sub(regex, r'\2 \1', x) for x in inp]
print(output)
這列印:
['3200 NORTHLINE AVE STE 360 GREENSBORO 27408-7611 NC US',
'200 LINE AVE STE 360 GBORO 77611 NC CA',
'60 Indiranagar Bangalore INDIA']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491954.html
