숫자와 문자가 포함 된 문자열이 있습니다.
숫자 467033이 포함 된 전체 문자열 (문자열)을 찾아야합니다. 예 : 당신이 또 다른 문자열 내에서 문자열을 검색하는 경우 1.467033777777777파이썬에서 문자열을 찾으십시오.
감사
숫자와 문자가 포함 된 문자열이 있습니다.
숫자 467033이 포함 된 전체 문자열 (문자열)을 찾아야합니다. 예 : 당신이 또 다른 문자열 내에서 문자열을 검색하는 경우 1.467033777777777파이썬에서 문자열을 찾으십시오.
감사
, 당신은 in
사용할 수 있습니다
>>> sub_num = "467033"
>>> my_num = "1.467033777777777"
>>> sub_num in my_num
True
그러나, 난 그냥 검색 문자열보다는 문제에 더있어 의심하고, 이런 방식으로하는 것이 최적이 아닐 수도 있습니다. 당신이하려는 일에 대해 더 구체적으로 말할 수 있습니까?
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']
및 8146.70337777? – eyquem
글쎄, 나는 당신이 십진법 전후에 필요하다고 가정하고 있었다. 가장 쉬운 것은 많은 수의 병렬 정규 표현식을 작성하는 것이고, 파이썬은이를 어쨌든 최적으로 컴파일해야합니다. – highBandWidth
이 시도 :
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']
이것은 괜찮은 예이지만 데이터 세트에 따라 비용이 많이 소요될 수 있습니다. 이미 문자열을 re로 스캔하고 있기 때문에 센티널 값을 패턴으로 구울 수 있습니다. – jathanism
네, 성능면에서 단순함을 찾으러갔습니다. 좀 더 일반적인 답변을 한 번에 여러 장을 검색하기 위해 업데이트했습니다. – samplebias
jathanism에 대한 설명을 이해하지 못합니다 .- 첫 번째 코드에서, 나는 할 것입니다 : "'467033 '이 num.replace ('. ',' ')이면''두 번째 코드는 그렇게하지 못합니다. 그러나 그가 원하는 것에 따라 그것을 할 필요가 없을지도 모릅니다. – eyquem
관련성이 더 높은 답변을 제공하기 위해 몇 줄의 실제 데이터를 얻을 수 있습니까? –
대단히 감사합니다.하지만 해냈습니다! – Nick