簡體   English   中英

在 python3 中獲取一個列表並生成一個字符串,但轉義雙引號以便作為搜索參數傳遞給 azure 搜索

[英]take a list in python3 and make into a string but escape double quotes in order to pass as search parameter for azure search

我在 python 中有一個應用程序,它接受我們想要用作 Azure 認知搜索中的搜索詞的文本(字符串)列表。 搜索參數需要是一個字符串,所以如果我有一個單詞列表,我可以執行以下操作:

words_to_search_list = ["toy", "durable"]
words_to_search_str = ' '.join(words_to_search_list)

然后將 words_to_search_str 作為 Azure 搜索中的“搜索”參數傳遞,它可以搜索具有“耐用”或“玩具”的文本。

"toy durable"

但是,我不確定如何處理 words_to_search_list 中存在二元組或三元組的情況,如下所示:

words_to_search_list = ["more toys", "free treats"]

為了從 Azure 取回包含“更多玩具”或“免費零食”的文本,我們需要像這樣傳遞參數:

"\"more toys\" \"free treats\""

這意味着二元組需要用雙引號括起來,但已轉義。 我開始這樣做:

words_to_search_str=""
for words in words_to_search_list:
    words_list=words.split()
    if len(words_list)>1:
        words_escaped='\\"'+ words + '\\"' 
        words_to_search_str+=words_escaped
    else:
        words_to_search_str+=words

但這使 words_to_search_str 變成了以下內容:

'\\"more toys\\"\\"free treats\\"'

這不是我想要的(雙后擋板不起作用)。

有什么方法可以獲取該字符串列表並最終得到一個字符串,但是每個二元組都在(轉義的)雙引號中?

編輯:我想在我這里的解決方案中添加它,如果你打印它,你會得到看起來是正確的對象(單反斜杠,而不是雙),但實際對象似乎仍然有雙反斜杠和當您傳入搜索參數時,它們不會給出相同的結果...

如果您運行的是 3.6+,則應該這樣做:

words_to_search_list = [
    "toy", "durable", "more toys", "free treats", "big durable toys"
]

words_to_search_str = '\"search\": \"' + ' '.join([
    f'\\"{word}\\"' if ' ' in word else word for word in words_to_search_list
]) + '\"'

print(words_to_search_str)

如果沒有,請嘗試:

words_to_search_list = [
    "toy", "durable", "more toys", "free treats", "big durable toys"
]

words_to_search_str = '\"search\": \"' + ' '.join([
    '\\"{}\\"'.format(word) if ' ' in word else word for word in words_to_search_list
]) + '\"'

print(words_to_search_str)

當你顯示一個字符串時,它基本上是如何輸入字符串作為 python 語法的。 雙反斜杠並不是真正的雙反斜杠,就像當您編寫 python 代碼時,您使用雙反斜杠通過轉義來指示實際的反斜杠,python 只是這樣做。 這也是雙引號沒有被轉義的原因,它以單引號顯示字符串。 我希望這有幫助

以下應該為您提供該格式:

words_to_search_list = ["more toys", "free treats"]
updated_words = ['\\"{}\\"'.format(words) for words in words_to_search_list]
words_to_search_str = '"{}"'.format(' '.join(updated_words))
print(words_to_search_str)

問題出在你逃避 \\ : words_escaped='\\\\"'+ words + '\\\\"'

你應該轉義,但是 "like: words_escaped='\\"'+ words + '\\"'

這應該會產生預期的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM