2017-02-01 63 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) 

將獲得的產品代碼的旅程。我如何去做與此相反的事情,即刪除產品代碼之外的所有文本?該產品的代碼將永遠是一個15字符串,開始以字母A

我一直在貨架我的大腦和谷歌搜索找到一個解決方案,但似乎無法推測出來。

感謝

+1

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

+2

只需提取你要保持並丟棄的,其餘什麼串。 – skrrgwasme

+0

的可能的複製[Python的正則表達式的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)