首頁  >  問答  >  主體

如何使用Python來匹配帶有附加部分的字串,但如果它們的附加部分不同,則不匹配它們

如何匹配帶有附加部分的字串,但如果它們具有不同的附加部分,則不匹配它們? 例如,如果我有一個名字列表,並且需要將其與我的資料庫中的名字進行匹配:

|          My DataBase      |       Foreign table       |
| David James Malan Neeko   | David James Malan         |
| David James Malan Neeko   | David James Malan Mathew  |
| David James Malan Neeko   | David jam Mlan            |

我試過先進行完全匹配,如果沒有找到,我會繼續從外部名字字符串的末尾刪除一個字符,然後再次嘗試匹配,直到只有一個記錄與我的數據庫匹配。

這種技術可以匹配上表中的第一和第三個示例,但問題是它也匹配了第二個示例,因為程序每次都會刪除一個字符,直到整個Mathew單詞被刪除,然後找到了一個匹配,這在這種情況下是錯誤的匹配。

有什麼建議可以讓我只進行完全匹配或匹配但只有一邊有名字的附加部分,但如果它們都有兩個不同的名字部分,則不匹配它們。

可以使用SQL或Python來解決這個問題。

提前感謝您的幫忙。

P粉676588738P粉676588738395 天前674

全部回覆(1)我來回復

  • P粉145543872

    P粉1455438722023-09-21 11:25:47

    這是非常低效的,將需要進行全表掃描。

    SET @name_str = 'David James Malan Neeko';
    
    SELECT *
    FROM tbl
    WHERE name LIKE CONCAT(@name_str, '%') OR @name_str LIKE CONCAT(name, '%')
    ORDER BY name = @name_str DESC, name LIKE CONCAT(@name_str, '%') DESC;
    

    ORDER BY 子句中的第一個表達式將首先對完全匹配進行排序,然後第二個表達式將對以整個搜尋字串開頭的name#進行排序,然後是以name 開頭的搜尋字串。

    顯然,你可以直接將搜尋字串當作參數傳遞,而不是使用 SET @name_str = '...';

    這裡有一些範例的 db<>fiddle

    回覆
    0
  • 取消回覆