2011-03-22 6 views
2

숫자와 문자가 포함 된 문자열이 있습니다.
숫자 467033이 포함 된 전체 문자열 (문자열)을 찾아야합니다. 예 : 당신이 또 다른 문자열 내에서 문자열을 검색하는 경우 1.467033777777777파이썬에서 문자열을 찾으십시오.

감사

+0

관련성이 더 높은 답변을 제공하기 위해 몇 줄의 실제 데이터를 얻을 수 있습니까? –

+0

대단히 감사합니다.하지만 해냈습니다! – Nick

답변

1

, 당신은 in 사용할 수 있습니다

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

그러나, 난 그냥 검색 문자열보다는 문제에 더있어 의심하고, 이런 방식으로하는 것이 최적이 아닐 수도 있습니다. 당신이하려는 일에 대해 더 구체적으로 말할 수 있습니까?

+0

물리 계산에서 일부 데이터 (많은 정보)를 얻었습니다. 이상한 고지를 만들었습니다 - 숫자 467033이 포함 된 숫자는 나에게 매우 유익 할 것입니다. – Nick

+0

그래서, 문자열이 있습니다 -> 숫자가 들어있는 모든 숫자를 찾으십시오. 7 – Nick

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

+0

글쎄, 나는 당신이 십진법 전후에 필요하다고 가정하고 있었다. 가장 쉬운 것은 많은 수의 병렬 정규 표현식을 작성하는 것이고, 파이썬은이를 어쨌든 최적으로 컴파일해야합니다. – highBandWidth

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

+0

네, 성능면에서 단순함을 찾으러갔습니다. 좀 더 일반적인 답변을 한 번에 여러 장을 검색하기 위해 업데이트했습니다. – samplebias

+0

jathanism에 대한 설명을 이해하지 못합니다 .- 첫 번째 코드에서, 나는 할 것입니다 : "'467033 '이 num.replace ('. ',' ')이면''두 번째 코드는 그렇게하지 못합니다. 그러나 그가 원하는 것에 따라 그것을 할 필요가 없을지도 모릅니다. – eyquem

관련 문제