簡體   English   中英

Python:檢查字符串是否滿足特定格式

[英]Python: check if string meets specific format

Python3 編程。

我很難控制字符串是否符合特定格式。

所以,我知道 Python 沒有像 Java 這樣的.contain()方法,但我們可以使用正則表達式。 因此,我的代碼可能看起來像這樣,其中 lowpan_headers 是一個字典,其字段是一個應該滿足特定格式的字符串。 所以代碼大概是這樣的:

import re

lowpan_headers = self.converter.lowpan_string_to_headers(lowpan_string)
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(lowpan_headers[dest_addrS])

但是,我的問題出在格式上,我無法正確處理。 格式應類似於bbbb00000000000000170d0000306fb6 ,其中前 4 個字符應為bbbb ,所有 rest 的長度應為十六進制值(因此從 0-9 到 af)。

所以有兩個問題:(1)除了導入re之外,還有什么更簡單的方法(2)如果沒有,你能幫我解決這個正則表達式嗎?

至於正則表達式,您正在尋找,我相信

^bbbb[0-9a-f]{28}$

應該正確驗證您的要求。

至於是否有比使用re模塊更簡單的方法,我想說的是,實際上並沒有達到您想要的結果。 雖然在python中使用in關鍵字的工作方式與您希望contains方法適用於字符串的方式相同,但您實際上是想知道字符串的格式是否正確。 因此,相對簡單的最佳解決方案是使用正則表達式,然后使用re模塊。

這是不使用regex的解決方案:

lowpan_headers = 'bbbb00000000000000170d0000306fb6'
if lowpan_headers[:4] == 'bbbb' and len(lowpan_headers) == 32:
    try:
        int(lowpan_headers[4:], 16)  # tries interpreting the last 28 characters as hexadecimal
        print('Input is valid!')
    except ValueError:
        print('Invalid Input')  # hex test failed!
else:
    print('Invalid Input')  # either length test or 'bbbb' prefix test failed!

實際上,Python的確與.contains()方法等效。 您可以使用in運算子:

if 'substring' in long_string:
    return True

這里已經回答類似的問題。

但是,對於您的情況,我仍然堅持使用正則表達式,因為您確實在嘗試評估某種String格式。 為確保您的字符串僅具有十六進制值(即0-9和af),以下正則表達式應這樣做: ^[a-fA-F0-9]+$ 附加的“復雜”是字符串開頭的四個“ b”。 我認為一個簡單的解決方法是將它們包括如下: ^(bbbb)?[a-fA-F0-9]+$

>>> import re
>>> pattern = re.compile('^(bbbb)?[a-fA-F0-9]+$')
>>> test_1 = 'bbbb00000000000000170d0000306fb6'
>>> test_2 = 'bbbb00000000000000170d0000306fx6'
>>> pattern.match(test_1)
<_sre.SRE_Match object; span=(0, 32), match='bbbb00000000000000170d0000306fb6'>
>>> pattern.match(test_2)
>>>

當前缺少的部分是檢查字符串的確切長度,您可以使用字符串長度方法或擴展正則表達式,但是我敢肯定您可以從這里獲取它:-)

正如我在評論中提到的,Python 確實具有contains()等效項。

if "blah" not in somestring: 
    continue

(來源) (PythonDocs)

如果您希望使用正則表達式來驗證輸入,則可以使用以下命令:

^b{4}[0-9a-f]{28}$ - 帶有解釋的Regex101演示

暫無
暫無

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

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