2012-01-25 2 views
3

文字列の最後の4桁の値を検索してからグループを作成するにはre.searchを使用する方法後で使用するための文字列。Pythonのre.searchの正規表現 - 私は、文字列の入力を受け付けるPythonスクリプト(私の非常に最初に)書かれている

入力文字列は、このような何か希望:私は現在使用しているre.searchがある

NSC_sdiakjfean=ffffffff3c19594d45525d5f4f58455e445a4a423660 

を:

s = re.search('NSC_([a-zA-Z0-9\-\_\.]*)=[0-9a-f]{8}([0-9a-f]{8})[0-9a-f]{24}([0-9a-f]{4})',name) 

私が見つけた問題は、その時々入力します私はこのセクション[0-9a-f] {24}が欠けているので、私のpythonスクリプトは例外でクラッシュし、最後のグループを捕捉しません。

私は入力文字列の末尾に最後のグループの開始とちょうどグループのために、最後の4桁の数字を使用することができます任意の正規表現は、(はい、私はこの多くをGoogleで検索しました)はありますか?

ありがとうございます。

アダム

+2

あなたは正確に、どのような例外を得るのですか? (そして、ところで、あなたはそれを一致させたい場合は、 '[-ZA-Z0-9 -_。]'間違っている。あなたは '終わりにダッシュを入れなければならない[-ZA-Z0-9 _.-]') – Tomalak

+0

@トマラクそれか、それをエスケープする。 –

答えて

2

$は、文字列の末尾にマッチします。

>>> import re 
>>> re.search("1234$","lkjlkj1234") # matches 
<_sre.SRE_Match object at 0x6a10578> 
>>> re.search("1234$","lkjlkj1234ff") # does not match 
>>> 

だから、あなたが望むかもしれ式が

s = re.search('([0-9a-f]{4})$',name) 
+0

最後に$を使うとうまくいくのですが、入力文字列の中に最後の4桁の前に24文字が入っていて、そうでないものもあります。 [0-9a-f] {24}を削除しても、短い文字列でも完全長文字列では問題ありませんか?それが意味をなさえすれば?オハイオ州、右。 –

+0

どのように 's = re.search( 'NSC _([a-zA-Z0-9 \ - \ _ \。] *)= [0-9a-f] {8}([0-9a-f] {8 })。*([0-9a-f] {4})$ '、name) '?両方のタイプのラインをキャプチャする必要があります。それがうまくいかない場合は、常に 's'のバイナリ値をテストして、それが一致するかどうかを調べることができます。 –

+0

これは治療に効果があります。どうもありがとうございました。 –

1

であるあなたはちょうどこのようなものを使用することができ、文字列の最後の4つのシンボルの値を見つけるために、正規表現は必要ありません。

s = 'NSC_sdiakjfean=ffffffff3c19594d45525d5f4f58455e445a4a423660' 
print s[-4:] 
+1

彼は後で参照できるように、行全体を含むデータポイントのグループを作ろうとしています。あなたが描いているのは、現在の文字列の最後の4文字だけです。 – Drahkar

+0

私は文字列をスライスすることについては考えていませんでしたが、スクリプトのどこかでそれを前にしていました。 –

関連する問題