2017-05-18 35 views
0

我有一個字符串,如"SW: C000032345RE"。我試圖提取下10個字母。Python正則表達式:找到下5個字母

所以答案應該像"C000032345RE"。我試圖用兩種不同的方法來實現它

拳頭是SW後面的下一個10個字母:或SW:和RE之間的字母。我正在使用以下腳本

import re 
sub = "SW: C000032345RE" 
a= re.search("^SW: (\w)", sub) 
a.group(0) 

當然它沒有顯示我想要的結果。每一個幫助都很重要!

+0

嘗試'「SW:\ s *(\ w +)」' – TheChetan

回答

1

\s*意味着零個或多個空格和\w{10}意味着10個單字字符:

import re 
sub = "SW: C000032345RE" 
a = re.search("^SW:\s*(\w{10})", sub) 
print (a.group(1)) 
C000032345 
+0

對於每一個問題,你都可以在'pandas',LOL中找到解決方案。你是'熊貓'的主人。 –

+0

以前有標籤熊貓,對不起;) – jezrael

+0

謝謝@jezrael,我專門尋找正則表達式 –

1

當您應該搜索其中的10個(\w{10})時,您正在搜索單個單詞字符(\w)。您還希望group(1)用於括號的內容,而不是group(0)這是整個比賽。

import re 
sub = "SW: C000032345RE" 
a = re.search("^SW: (\w{10})", sub) 
a.group(1) 

你或許應該還可以檢查a調用它的方法,如正則表達式可能不會匹配之前!例如。

>>> sub = "SW: C00003..." 
>>> a = re.search("^SW: (\w{10})", sub) 
>>> a.group(1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'NoneType' object has no attribute 'group' 
2

解決方案,而無需使用regex

In [84]: val = sub.find('SW: ')+len('SW: ') 
In [85]: sub[val:val+10] 
Out[85]: 'C000032345' 
+0

感謝Rahul回答 –

1

SW:應積極向後斷言(?<=),這樣就只捕獲所需的數據,如果其前面的比賽!

>>> import re 
>>> sub = "SW: C000032345RE" 
>>> a = re.search("(?<=SW:)\w{10}", sub) 
>>> a.group(0) 
'C000032345' 
+0

'(?!...)'不是非捕獲組。此外,非捕獲組不會阻止部分字符串在整個比賽中返回。 –

+0

我對此非常抱歉!編輯答案! –

0

爲什麼你不能使用簡單的字符串分裂這個?

sub = "SW: C000032345RE" 
sub[4:] 

或者,你可以這樣做:

sub.split(':')[1].strip() 
+1

'「ABCDSW:C000032345RE」',如果字符串像這樣?,並且他也不需要'RE'。最後它不是吐口水,而是切片。 –

+0

sub.split(':')[1] .strip() – raja

1

你應該使用簡單的字符串切片像

>>> sub = "SW: C000032345RE" 
>>> sub[-12:] 
'C000032345RE' 
>>> sub[-12:-2] 
'C000032345' 
>>> 
+0

這不是分裂。它是切片:) – itzMEonTV

+0

對不起,但希望它會工作,除非他在一個句子中找到它。 – Waqar