2017-02-17 43 views
-1

文字列からデータを抽出する必要があります。この文字列はfixed-string-<number>-<string>のようなものです。 Fixed stringは常に同じです、私は数字とその文字列を抽出する必要があります。 python 3.5で数字と文字列を抽出する正規表現

、私は

str = 'initial-string/fixed-string-124-jeff-thompson' 
result = re.match('fixed-string-([0-9]*)-(.*)', str) 
print (result) 

次の正規表現を使用しています。しかし、結果は、私は、文字列をチェックし、それがうまく形成されています、常にNone値です。

私は間違っていますか?

更新

testing = 'first-string/fixed-string-123-jeff-thompson' 
pattern = r'fixed-string-(\d+)-(.*)' 

result = re.match(pattern, testing) 

私はこれをテストし、コードはまだ私をNone返します。

ありがとう。

+4

変数名として 'str'を使用しないでください。正規表現は実際に動作します。[このデモ](https://ideone.com/g4r2yC)を参照してください。 're.match'はstartという文字列でのみ一致するものを探します。 –

+0

正常に動作すると思われる文字列を入力してください。 – kazemakase

答えて

1

あなたが使用しているre.match、(つまり、あなたの文字列の最初の文字から)。 ここでは、 "initial-string /"は一致しません。

パターンに「initial-string /」を含めるか、文字列の任意の位置から始まるre.searchを使用できます。

パターンでエスケープする必要がないように、生の文字列(\ backslahes 'を含む文字列)を使用する方が良いことに注意してください。

string = 'initial-string/fixed-string-124-jeff-thompson' 
result = re.search(r'fixed-string-([0-9]*)-(.*)', str) 
result.groups() 
# ('124', 'jeff-thompson') 

または

result = re.match(r'initial-string/fixed-string-([0-9]*)-(.*)', str) 
result.groups() 
# ('124', 'jeff-thompson') 
2

次作品:

> s = 'fixed-string-345-abc' 
> re.match(r'fixed-string-(\d+)-(.+)') # if num and string shouldn't be empty 
# re.match(r'fixed-string-(\d*)-(.*)') 
> m.group(1, 2) 
('345', 'abc') 
+0

Python 3.xでは、省略形のクラスはUnicode対応です。 '\ d'は' [0-9] '以上にマッチします。基本的には、同じ正規表現のOPを使用して、少し精度が低いです。 –

+0

このコードはPythonコンソールでは動作しますが、自分のコードでは動作しません。 're.match'はまだ私を' None'に戻しています。 –

1

これは、あまりにも、作品:

import re 
s = 'fixed-string-123-456' 
result = re.findall('(?<=fixed-string-)(\d+)-(.*)', s) 
if result: 
    print (result[0]) 
#('123', '456') 
先頭にパターンを一致させようとします

https://ideone.com/4RRwff

関連する問題