2

ピリオドのないピリオド間の数値をキャプチャするにはどうすればよいですか?

数字は最大で3桁未満にすることができます。0 <= i <1000

例:

  • ドメイン。3.マルハナバチ
  • ドメイン。56 .mashabee
  • ドメイン。898.barista _
4

3 に答える 3

5
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
于 2012-11-14T02:36:48.443 に答える
3

正規表現について

正規表現が常に解決策であるとは限りません。正規表現の使用についての引用があります。


問題に直面したときに、 「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています。

参照: http: //regex.info/blog/2006-09-15/247

を使用して可能な解決策regex

  1. re正規表現にはモジュールを使用してください。ドキュメントへのリンクは次のとおりです。
  2. 一致は、の正規表現項を使用しr"\.(\d{1,3})\."ます。この一致により、リテラルピリオドの後に1、2、または3桁の数字が続き、その後に別のリテラルピリオドが続きます。
  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]
于 2012-11-14T02:57:44.763 に答える
0

これを試してみてください:

>>> import re
>>> text = 'domain.56.mashabee'
>>> mystr = re.compile(r'^\w+\.(\d{1,3})\.')
>>> print mystr.search(str(text)).groups()[0]
56
于 2012-11-14T02:37:39.940 に答える