2017-10-31 22 views
0

の柔軟な長さのPythonの文字列のパターンを探す:私は、文字列持つ各パターンコンポーネント

str_x = "121001221122010120211122211122222222112222" 

を私は与えられたパターンは、文字列に観測された回数を知りたいが、パターンが見られるべきです柔軟として:

私が探しているパターンは、このようです:

  • 少なくとも 3 2の続きすることによって、この条件を満足するパターンは、このように、たとえば、私が欲しい「22211222」が、また、「2222111222」と「222222221111111111222」

    なります少なくとも 3 2の

によって少なくとも 2 1のを踏襲この "柔軟なパターン"がstr_xに何回表示されているかを調べることができます。

正解は2回です。

どのようにすればいいですか?本当にありがとう。

EDIT有効なパターンが重なっているので、2倍の答えは、実際に間違っている、私は上記の配置の定義を考えると

...例えば"222111222"、 "2221112222"、 "22211122222"などはすべて目的を満たすパターンです。 https://docs.python.org/2/library/re.html

正規表現:私が欲しいもの

はあなたの問題を解決するために正規表現を使用する必要が重複しないパターンの数(つまり、まだ2回)

+0

正規表現 – Arseniy

答えて

1

を見つけることです。
regex = r"2{3,}?1{2,}?2{3,}?"
手段=少なくとも三つ2の少なくとも二つの1の2{3,}手段は全て、少なくとも第見つける少なくとも三つ2の

表記続く続くを見つけます。 REE 2の
?手段 - 貪欲検索 - ちょうど?

import re 

regex = r"2{3,}?1{2,}?2{3,}?" 

test_str = "121001221122010120211122211122222222112222" 

matches = re.finditer(regex, test_str) 

for matchNum, match in enumerate(matches): 
    matchNum = matchNum + 1 

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group())) 
print ("total matches: {matches}".format(matches= matchNum)) 
+0

を使用してくださいありがとう!それが助けになりました。 – Emjora

1

を削除するここで動作するコードの一部です - あなたが重複しないパターンを検索したい場合は
と重なっていてもよい検索:

def count_pattern(str): 
     # one_count keeps count of contiguous 1s 
     # we check for the pattern at 2 just after a block of 1s 
     # count keeps track of pattern counts 
     count=0 
     one_count=0 
     for i in range(1,len(str)): 
      if str[i]=='1': 
       if str[i-1]=='1': 
        one_count=one_count+1 
       else: 
        one_count=1 
      elif (str[i]=='2')&(str[i-1]=='1')&(len(str)-i>2)& 
       (i>one_count+2)&(one_count>1)&(str[(i+1):(i+3)]=='22')& 
       (str[(i-one_count-3):(i-one_count)]=='222'): 
       count=count+1 
     return(count) 


     print("Number of times the pattern 
     occurs=",count_pattern('121001221122010120211122211122222222112222')) 
は、
関連する問題