0

ユーザーからの入力を取得しようとしていて、各文字で構成される正規表現をコンパイルしたいのですが、listを使用して、引数としてlistを使用してみましたが失敗しました。

文字列全体を一致させたくありませんが、より具体的には個々の文字のみを一致させます

   x = raw_input("Enter string of length 7 to generate your scrabble helper: ")
    a = []
    for i in x:
        a.append(i)
    print(a)
    p = re.compile(a)

しかし、これは失敗します!!!!

Traceback (most recent call last):
  File "scrabb.py", line 8, in <module>
    p = re.compile(a)
  File "/usr/lib/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python2.7/re.py", line 232, in _compile
    p = _cache.get(cachekey)
TypeError: unhashable type: 'list'
4

3 に答える 3

2

aはリストでありre.compile()、文字列が必要です。変数名iは通常、整数にのみ使用され、たとえばch文字に使用されます(短い変数名を使用する場合は、規則に従う必要があります:-)

おそらく次のようなものです:

usertext = raw_input("Enter string of length 7 to generate your scrabble helper: ")
lst = []
for ch in usertext:
    lst.append(ch)
print(lst)
scrabble_re = re.compile(''.join(lst))

または同等ですが、はるかに短いです:

usertext = raw_input("Enter string of length 7 to generate your scrabble helper: ")
scrabble_re = re.compile(usertext)

于 2012-08-11T10:30:40.427 に答える
2

私はあなたが何を必要としているかを正確に理解しているかどうかはわかりませんが、おそらくこのようなものが役立つでしょう:

x = raw_input("Enter string of length 7 to generate your scrabble helper: ")
p = re.compile('|'.join((c for c in x)))

これは、文字列全体ではなく、入力文字列の各文字と一致する必要があります。ユーザー入力に特殊文字が含まれていないことを確認する必要がありますが、それは別の質問です。

于 2012-08-11T10:31:55.363 に答える
1

2つの文字列間の文字の重複を見つけることにもっと興味があるようです。

x = raw_input('enter string')
y = 'aeiou'

overlap = list(set(x) & set(y))

print(overlap)

xこれにより、との間で共有される文字が出力されyます。私はあなたが何をしようとしているのか完全には理解していませんが、正規表現は高レベルのプログラミングで最も乱用されているもののいくつかです。実際に必要な場合にのみ使用してください。

于 2012-08-11T10:37:59.233 に答える