2011-03-22 138 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