2011-03-22 108 views
2

有一個字符串,它包含數字和字符。
我需要找到包含數字467033的整個數字(在該字符串中)。 例如, 1.467033777777777在Python中查找字符串

感謝

+0

是否有可能得到幾行真實數據給你更相關的答案? – 2011-03-22 23:00:39

+0

非常感謝,但我做到了! – Nick 2011-03-22 23:03:18

回答

1

如果你只是在尋找另一個子內的子串,你可以使用in

>>> sub_num = "467033" 
>>> my_num = "1.467033777777777" 
>>> sub_num in my_num 
True 

不過,我懷疑還有更多的問題不僅僅是搜索字符串,這樣做可能不是最佳的。你能更具體地說明你想做什麼嗎?

+0

從物理計算中獲得了一些數據(很多)。我做了一個奇怪的通知 - 包含數字467033的數字可能對我很有幫助。 – Nick 2011-03-22 22:04:49

+0

所以,有一個字符串 - >找到所有包含數字的數字,例如7 – Nick 2011-03-22 22:06:20

1
import re 
a = 'e.g. 1.467033777777777\nand also 576575567467033546.90 Thanks ' 
r = re.compile('[0-9.]*467033[0-9.]*') 
r.findall(a) 
['1.467033777777777', '576575567467033546.90'] 
+0

和8146.70337777? – eyquem 2011-03-22 22:39:24

+0

那麼,我假設你在小數點前後需要它。最簡單的事情就是編寫大量的並行正則表達式,而python應該儘可能最佳地編譯它。 – highBandWidth 2011-03-22 23:41:13

2

試試這個:

import re 

RE_NUM = re.compile('(\d*\.\d+)', re.M) 

text = 'eghwodugo83o135.13508yegn1.4670337777777773u87208t' 
for num in RE_NUM.findall(text): 
    if '467033' in num: 
     print num 

打印:

1.4670337777777773 

廣義/響應優化評論:

def find(text, numbers): 
    pattern = '|'.join('[\d.]*%s[\d.]*' % n for n in numbers) 
    re_num = re.compile(pattern, re.M) 
    return [m.group() for m in re_num.finditer(text)] 

print find(text, ['467033', '13']) 

打印:

['135.13508', '1.4670337777777773'] 
+0

這是一個體面的例子,但可能代價昂貴,取決於數據集。既然你已經用re來掃描字符串了,你還可以將哨兵值燒成模式。 – jathanism 2011-03-22 22:23:08

+0

是的,我只是爲了簡單而不是表現 - 只是用更一般的東西更新了答案,一次搜索多個數字。 – samplebias 2011-03-22 22:30:25

+0

我不明白jathanism的言論 - 在第一個代碼中,我會這樣做:''if'467033'in num.replace('。','')''第二個代碼阻止這樣做。但也許沒有必要這樣做,這取決於他想要什麼。 – eyquem 2011-03-22 22:46:04