2016-08-12 7 views
0

Pythonで文字列や配列の部分チェックを行うには?Pythonで文字列や配列の部分チェックを行うには?

私はこの

「doamins」のような文字列を持っており、それは部分的に私は私が必要なものを説明しますいくつかの例を試してみました

「domainsid」と一致している必要があり

例1: - >私は部分一致である必要があり、「ドメイン」を必要とするので、これは罰金ではありません

"domains" in "domainid" 
False 

例2: - >この期待通りに動作します(ただし、問題は例えば3で一例であり)

"domains" in "domainsid" 
True 

例3: -​​から適応> "d" が一致していませshud(代わりに、 "ドメインが一致するshud")、これは罰金ではありません

>>> "d" in "domainsid" 
True 
>>> "d" in "domainid" 
True 
+1

... match.groupsは()3番目の例では真の –

+0

を返す場合、なぜ '際に一致させる必要がありますdomain'あなたがしようとしているのは 'd'にマッチさせることです? 'd'も有効な部分文字列です。 – skjoshi

+0

"d"はマッチしないでしょうか? –

答えて

1

まずヘルパー機能部分文字列を生成します。

import itertools 
def n_wise(iterable, n = 2): 
    '''n = 2 -> (s0,s1), (s1,s2), (s2, s3), ... 

    n = 3 -> (s0,s1, s2), (s1,s2, s3), (s2, s3, s4), ...''' 
    a = itertools.tee(iterable, n) 
    for x, thing in enumerate(a[1:]): 
     for _ in range(x+1): 
      next(thing, None) 
    return zip(*a) 

次に、サブストリング、最長ファースト、およびメンバーシップのテストを繰り返す関数。動作していない 'の' ... pattern.match(^( 'ドメイン')$)

def foo(s1, s2): 
    '''Finds the longest matching substring 
    ''' 
    # the longest matching substring can only be as long as the shortest string 
    #which string is shortest? 
    shortest, longest = sorted([s1, s2], key = len) 
    #iterate over substrings, longest substrings first 
    for n in range(len(shortest)+1, 2, -1): 
     for sub in n_wise(shortest, n): 
      sub = ''.join(sub) 
      if sub in longest: 
       #return the first one found, it should be the longest 
       return sub 

s = "fdomainster" 
t = "exdomainid" 
print(foo(s,t)) 
関連する問題