2017-02-01 7 views
0

私のような文字列があります。この文字列内のテキストは常に、同じ形式になっていないだろう、それはダイナミックになりますので、私は、単純な検索を行うと、置き換えることはできませんPythonの負の正規表現

s = "The code for the product is A8H4DKE3SP93W6J and you can buy it here." 

を製品コードを入手してください。

私はそれを見ることができます:

re.sub(r'A[0-9a-zA-Z_]{14} ', '', s) 

は、製品コードの乗車を取得します。これとは逆に、つまり製品コードとは別にテキストをすべて削除するにはどうすればよいですか?製品コードは常に文字Aから始まる15文字の文字列になります。

解決策を見つけるために私の脳とグーグルを台無しにしていますが、それを理解できないようです。

おかげ

+1

[ 're.findall'](https://docs.python.org/3.1/library/re.html#re.findall) – TemporalWolf

+2

をちょうどあなたが保つとの残りの部分を破棄したいものを抽出文字列。 – skrrgwasme

+0

[Python regex findall]の重複している可能性があります(http://stackoverflow.com/questions/7752551/python-regex-findall) – fafl

答えて

1

代わりの文字列の残りの部分を置き換えて、製品番号を検索するためにre.search()を使用します。正規表現で

In [1]: import re 

In [2]: s = "The code for the product is A8H4DKE3SP93W6J and you can buy it here." 

In [3]: re.search(r"A[0-9a-zA-Z_]{14}", s).group() 
Out[3]: 'A8H4DKE3SP93W6J' 
+0

うん、それはそれを整理しました、ありがとう!! – badcoder

0

、あなたがすることによって置き換えるために残しておきたい部分に一致させることができますパターンの周りに中カッコを使用し、バックスラッシュを含むサブパターンとその一致部分のインデックスを参照します。次のコードでは、 "(A [0-9A-Za-z _] {14})"は一致させる部分です。結果の文字列を "\ 1"で置き換えることができます。

re.sub(r'.*(A[0-9A-Za-z_]{14}).*', r'\1', s)