ピリオドのないピリオド間の数値をキャプチャするにはどうすればよいですか?
数字は最大で3桁未満にすることができます。0 <= i <1000
例:
- ドメイン。3.マルハナバチ
- ドメイン。56 .mashabee
- ドメイン。898.barista _
your_string.split(".")[1]
あなたに番号を与えます
私のipythonシェルの例:-
In [47]: your_string = "domain.3.bumblebee"
In [48]: your_string.split(".")[1]
Out[48]: '3'
ユースケースに正規表現は必要ありません。
そしてもちろん、整数を返したい場合は、それをキャストするだけです。
In [49]: int(your_string.split(".")[1])
Out[49]: 3
正規表現が常に解決策であるとは限りません。正規表現の使用についての引用があります。
問題に直面したときに、 「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています。参照: http: //regex.info/blog/2006-09-15/247
regex
re
正規表現にはモジュールを使用してください。ドキュメントへのリンクは次のとおりです。r"\.(\d{1,3})\."
ます。この一致により、リテラルピリオドの後に1、2、または3桁の数字が続き、その後に別のリテラルピリオドが続きます。(...)
。この場合、1桁、2桁、または3桁の一致が括弧内にキャプチャされます。いくつかの正規表現の例へのリンクは次のとおりです。>>> import re
>>>
>>> subject = """
... domain.3.bumblebee
... domain.56.mashabee
... domain.898.barista
... """
>>>
>>> matches = re.finditer(r"\.(\d{1,3})\.",subject)
>>> results = [int(match.group(1)) for match in matches]
>>>
>>> results
[3, 56, 898]
これを試してみてください:
>>> import re
>>> text = 'domain.56.mashabee'
>>> mystr = re.compile(r'^\w+\.(\d{1,3})\.')
>>> print mystr.search(str(text)).groups()[0]
56