[英]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
如果您希望使用正則表達式來驗證輸入,則可以使用以下命令:
^b{4}[0-9a-f]{28}$
- 帶有解釋的Regex101演示
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.