1

私が持っていると言うstring1 = "Helloworld33"

string2の 3 文字の部分が含まれないように、a をチェックできるようにしたいと考えていますstring1

string2任意の長さの任意の文字セットにすることができます。

例えば:

string1 = "Helloworld33"

string2 = "ello" (invalid)

          "3hi3" (valid)

          "H e l l o" (valid)

          "Hw3" (valid)

          "I_^&_rld_37482" (invalid)

Pythonで正規表現を使用してこれを行うにはどうすればよいですか? または、なしでそれを行う方法はありますか?

編集:また、大文字と小文字を区別しないようにする方法はありますか?

どうもありがとう

4

4 に答える 4

3

difflibモジュールを使用できます。

import difflib
def solve(strs, match, n):
    s = difflib.SequenceMatcher(None, strs, match)
    return all(item.size < n for item in s.get_matching_blocks())
... 
>>> solve('Helloworld33', 'ello', 3)
False
>>> solve('Helloworld33', '3hi3', 3)
True
>>> solve('Helloworld33', 'H e l l o', 3)
True
>>> solve('Helloworld33', 'Hw3', 3)
True
>>> solve('Helloworld33', 'I_^&_rld_37482', 3)
False
于 2013-09-09T19:15:21.990 に答える
1

長さ 3 の部分文字列をすべて検索し、2 番目の文字列に含まれるかどうかを確認します。

valid = not any(sub.group(1) in string2 for sub in re.finditer(r"(?=(.{3}))", string1))

ここにデモンストレーションがあります: http://ideone.com/T77mHn

于 2013-09-09T19:12:25.627 に答える
0

さて、この種の問題 (マインドベンディング イテレーション) には、洗練された機能的な解決策がある傾向があります。

def not3(string2, string1):
    if len(string2) < 3:  return True    # reaching here, the sequence wasn't found
    if string2[:3] in string1: return False      # test beginning of string2 for existence in string1
    return not3(string2[1:], string1)  # recurse from next char of string2
于 2013-09-09T19:48:01.877 に答える