2017-02-17 5 views
1
import re 
st=input() #The input string 
ss=input() #The substring to be searched 
lss=len(ss) 
lst=len(st) 
x=lst-lss 
for i in range(x): 
    r=re.search(r'(%s)'%ss,st,i) 
    if r: 
     print(r.start(),r.end()) 

上記のコードはタスクへの応答です。タスクは次のとおりです。Pythonで正規表現のコードが機能しない

文字列Sが指定されています。

入力された場合、私はS.

内の文字列kの開始と終了のインデックスを見つける必要があり

aaadaa 
aa 

出力は次のようになります。

(0, 1) 
(1, 2) 
(4, 5) 

私が知っています私が書いたコードは間違っています。なぜなら、私は目的の出力を得ていないからです。私はそれが間違っていると自分自身を説得することができません。私はちょうどforループの後のコードがうまくいかない理由を知りたいですか? 誰かが私を助けることができますか?

+1

「i」をそのような「検索」に渡すとは思われません。検索の第3引数は 'flags'です。あなたがしようとしているのであれば、"検索を開始するインデックス "ではありません。 – Kevin

+0

これには正規表現は必要ありません(それは過剰です)。標準の 'string.find()'を使用してください。 – zwer

答えて

0

re.search()のドキュメントを最初に見てください.3番目のパラメータはflagです。あなたのケースでは


、あなたが結果を重ね合わ を探している、私はまっすぐ進むのソリューションはありません実現ので、私は、その出力である再帰

import re 
string = input() # The input string 
pattern = input() # The substring to be searched 

def match(pattern, string, startIdx=0): 
    if startIdx <= len(string) - len(pattern): 
     res = re.search(pattern, string[startIdx:]) 
     if res is not None: 
      print(res.start() + startIdx, res.end() + startIdx - 1) 
      return match(pattern, string, startIdx + res.start() + 1) 


match(pattern, string) 

を書いた

0 1 
1 2 
4 5 

これは期待どおりの作業を行うはずです。


私はpreexistedソリューションをチェックし、彼らはあなたの要求に合うません。

  • re.finditer、非重複検索を行うことができます。
  • re.findall do が重複していますが、インデックスを取得できません。
  • re.finditerre.findalllook aheadは一致するテキストのみを返します。

私はこの独自の機能を書くことが最良の方法だと思います。


いい質問ですが。

関連する問題