0

次のような文字列インスタンスで:

A Dirty Shame (2004)

最後にデートがあります。その日付を数値として別の変数に抽出したいと思います。これをpythonでどのように解決しますか?

名前に数字が入ることもあります!!

4

6 に答える 6

3
import re
s = 'A Dirty Shame (2004)'
pattern = r'(?P<year>\d{4})'
r = re.search(pattern, s)
n = int(r.group('year'))

4 桁の数字のみを検索します。文字列を整数に変換します。

于 2013-08-22T11:16:09.497 に答える
1
import re
re.findall('\d+', 'A Dirty Shame (2004)')
于 2013-08-22T11:07:36.497 に答える
1

以下を使用できます。

import re
number = int(re.findall('(?<=\()\d+(?=\))', 'A Dirty Shame (2004)')[0]);

または、正規表現を使用せずに、文字列内のどこにいても括弧間のすべての数字を検索する次を使用できます。

[int(s.strip('()')) for s in s.split() if s.strip('()').isdigit()]   
于 2013-08-22T11:14:05.843 に答える
1

別の答えですが、正規表現を使用していません(通常は遅いため):

文字列から分割関数を使用します。これは、文字列を区切り文字 ( http://docs.python.org/2/library/string.html#string.split )で分割します。そしてその ')')

>>> import string
>>> A = "A Dirty Shame (2004)"
>>> B = A.split('(')[1].split(')')[0]
>>> B
'2004'

文字列に他の括弧が存在する場合、これは機能しないことに注意してください

于 2013-08-22T11:31:24.770 に答える
0

使用できますre.search

>>> import re
>>> s = "A Dirty Shame (2004)"
>>> myresult =  int(re.search(r'\((.*?)\)', s).group(1))
>>> print myresult
2004

.*?隣接するトークン内のすべてのアイテムをキャプチャします。この場合、括弧内のすべてを取得します。\(最初の開き括弧に一致します。かっこは正規表現ではすでに別のものであるため、(バックスラッシュを付けて) エスケープする必要があります。これは、かっこの間のすべてを取得するために使用するグループ化トークンです。次に、反対側で反対のことを行います。

re.search()正規表現が文字列内の何かと一致する場合、一致を返します。.group(1)2004 年という年を取得するように求めます。

最後に、文字列を整数int()に変換するために囲みます。"2004"2004

于 2013-08-22T11:25:10.137 に答える
0

括弧内のすべてを検索します。

import re
re.findall('\((.*)\)', 'A Dirty Shame (2004)')[0]

この正規表現は、「バック トゥ ザ フューチャー 3 (1986)」のようにタイトルに数字が含まれている場合も引き続き機能します)。

于 2013-08-22T11:10:59.247 に答える