2012-02-06 3 views
1

Я пытаюсь увидеть, если строка содержит определенный текст и, если так сделать что-то, я использую in оператора питона, но я понял, его слишком строги в основном у меня есть следующий кодPython не строгий поиск текста в строке

Обычно это возвращение будет True

dynamic = "v23434" 
filename = "v23434.jpg" 

if dynamic in filename: return True 

однако, если у меня есть

dynamic = "v23434-" 
filename = "v23434.jpg" 

то она возвращает значение False, в связи с тире в конце dynamic, так что мой вопрос в том, есть ли способ проверить, имеет ли строка имя файла строку dynamic, но таким образом, что это не должно быть идеальным совпадением, достаточно нескольких символов.

EDIT

Несколькими символов, я имею в виду подстроку, состоящую из первых 3-х символов в динамике, так что если у меня есть

dynamic = "v23434-" 
filename = "testingv23434.jpg" 

, то он должен соответствовать, потому подстроки "v23" находится внутри filename

+3

Ну, как вы определяете «несколько символов»? Как вы определяете несовершенный матч? Вам нужны _first_ несколько (и сколько?) Символов 'dynamic', которые можно найти в' filename', или вы ищете _any_ подстроку 'dynamic', которая встречается в' filename'? Возможно, с минимальной длиной? Существуют алгоритмы для решения всех этих проблем, но вы должны быть конкретными в отношении ваших требований. –

+2

См. [Этот] (http://stackoverflow.com/q/682367/566644) вопрос. –

+1

вы можете использовать такие вещи, как Левенштейн расстояние – shenshei

ответ

3

Если вы просто хотите проверить первые три символа в своем поисковом запросе, используйте

def test(dynamic, filename): 
    return dynamic[:3] in filename 
+0

орехи, избили меня *, что * много – kurosch

+0

wow я знал, что я делал это сложно, спасибо: D – Paulo

+0

@ danihp: Это то, чего он хотел. Но спасибо за намек на ненужное 'if'! –

1

Просто отрезают первые три символа одной строки:

if dynamic[:3] in filename 
1

Этот бит кода поможет разобраться с проблемой я вы ищете не менее 3 последовательных символов:

>>> dynamic = "v23434-" 
>>> filename = "testingv23434.jpg" 
>>> any(s in filename for s in [ dynamic[i:i+3] for i in range(0, len(dynamic)-2) ]) 
True 

>>> filename = "testingv334.jpg" 
>>> any(s in filename for s in [ dynamic[i:i+3] for i in range(0, len(dynamic)-2) ]) 
False