名前付きグループで正規表現を使用できます。
基本的には、最初に正規表現を作成します (どちらの場合も、最初に数字または最初に文字の 2 つを作成しました)。次に、入力が一致するかどうかを確認します。一致する場合は、結果の一致オブジェクトを呼び出しgroupdict()
て、 のような辞書を取得します{'digits':'11547', 'letters':'QSD'}
。次に、それを使用します(私はそれを印刷しました)。
上記のアドバイスに従った完全な例:
>>> import re
>>> checks = [
re.compile(r'^(?P<digits>\d+)(?P<letters>\D+)$'),
re.compile(r'^(?P<letters>\D+)(?P<digits>\d+)$'),
]
>>> inputs = ['11547QSD', 'ABC98765', '111ABC111']
>>> for item in inputs:
for check in checks:
if check.match(item):
print('Digits are {digits}, letters are {letters}'.format(
**check.search(item).groupdict()
))
break
else:
print('%s is incorrect' % (item,))
Digits are 11547, letters are QSD
Digits are 98765, letters are ABC
111ABC111 is incorrect
短縮版
上記を理解している場合は、コードを短縮して、次のような結果の dict (一致する文字列 - 結果のグループ) を作成できます。
>>> from itertools import product
>>> {item: check.search(item).groupdict()
for (item, check) in product(inputs, checks) if check.match(item)}
{'ABC98765': {'digits': '98765', 'letters': 'ABC'},
'11547QSD': {'digits': '11547', 'letters': 'QSD'}}
注:
メタキャラクター\d
と\D
. 1 つ目は基本的に「数字」を意味し、2 つ目は「非数字」を意味します。それらが何を意味するかについての詳細はここにあります。