2014-09-04 32 views
0

我需要從字符串中提取單個或多個符號@。我只需要那些接踵而來的符號,而不是用任何字符和空格分開。 符號或多個符號@應該緊跟在數字後面。如果不是這些符號應該被忽略並且不被返回。如何從字符串中提取特定符號,如果它們跟在數字後面

從字符串a我需要只提取三個@@@符號,因爲第四個符號用空白字符分隔。

a='some text 1 a8 [email protected]@@ @ more text here 123 456` 

結果將是:

@@@ 

從可變b該函數將返回None因爲不是一個單一的符號的數字或數字之後@如下。

b='some text @@@ @ more text here 123 456` 

c變量僅單個符號@返回,因爲它是在數字後跟隨(而不是從它們分開)的只有一個:

c='some text @@@ [email protected] more text here 123 456` 

結果:@

+0

我相信這個問題會得到答案,因爲它很容易獲得代表增益,但是......您嘗試了什麼?你看過正則表達式嗎? – 2014-09-04 23:20:21

回答

1

您可以使用正則表達式:

>>> import re 
>>> r = re.compile(r'\d(@+)') 
>>> a = 'some text 1 a8 [email protected]@@ @ more text here 123 456' 
>>> r.search(a).group(1) 
'@@@' 
>>> b = 'some text @@@ @ more text here 123 456' 
>>> r.search(b) #None 
>>> c = 'some text @@@ [email protected] more text here 123 456' 
>>> r.search(c).group(1) 
'@' 

if條件結合起來,以檢查是否正則表達式中的字符串匹配的任何東西,或不:

>>> m = r.search(c) 
>>> if m: 
    print m.group(1) 

@ 
0

這是否對你的工作?

>>> import re 
>>> re.search('\d(@+)', a).groups()[0] 
'@@@' 
>>> re.search('\d(@+)', b) 
>>> re.search('\d(@+)', c).groups()[0] 
'@' 
1

雖然可能有一個正則表達式來做到這一點,一個循環就比較容易理解,如果你不知道什麼是正則表達式-ES是。

i = 0 
found = False 
while i < len(string) and not found: 
    if i != 0 and string[i] == '@': 
    if string[i-1].isnumeric(): 
     found = True 
    else: 
     i+=1 
    else: 
    i+=1 

if not found: 
    return None 
else: 
    out = '' 
    while string[i] == '@': 
    out += '@' 
    i+=1 
    return out 

大概可以改寫得更好,但這是做到這一點的簡單方法。

腳註:正則表達式會更好。

1
import re 

print re.findall('[0-9]@+', a) 

這將打印包含所有的比賽名單,在上述情況下,將打印

['[email protected]@@'] 

現在你可以做切片的字符串,得到你想要的東西。

希望這會有所幫助!

相關問題