簡體   English   中英

Django 查詢集中的正則表達式

[英]Regex in Django query set

我正在嘗試編寫一個 Django 查詢,它將按特定的正則表達式模式進行過濾。

我想通過一個代碼進行過濾,該代碼可以提取出任何非數字字符后跟一個數字,后跟一個非數字字符(空格很好)的情況。

就說一些代碼是AJDP8EP, jsif28EP, EROE88, oskdpoeks8

所以我希望我的結果返回: AJDP8EP, oskdpoeks8

這是我的查詢,但它不能正確識別事物。 數字是一個變量。

results = Book.objects.filter(author__contains = firstname,type = "Fiction").filter(code__regex = r'^(\D+)(number)(\D+)')

您不能在引用的正則表達式中使用變量。 嘗試連接字符串,如:

r"^(\\D+)(" + str(number) + ")(\\D+)"

這會將您的number變量轉換為字符串,以防它已經存在。

另外,如您對問題的評論之一所示, oskdpoeks8將與您的模式不匹配。 如果你想捕到代碼末尾可能出現number情況,一個解決方案是:

r"^(\\D+)(" + str(number) + ")(\\D*)"

注意用*替換+以捕獲零次出現的情況。

使用 python 3+,您可以使用 f-strings 將變量傳遞給正則表達式並在查詢中使用它們。 例如:

Car.objects.filter(
    car_code=rf'^{settings.SOME_SETTING}0*(\d+)$'
)

暫無
暫無

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

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