15

私はフォーマットのPython文字列を持っています

mystr = "hi.this(is?my*string+"

ここでは、特殊文字またはアルファベット以外の文字で囲まれた「is」の位置を取得する必要があります(つまり、この例では2番目の「is」)。ただし、

mystr.find('is')

望ましくない'this'に関連付けられている'is'の場合​​、位置を返します。文字列内のアルファベット以外の文字で囲まれている部分文字列の位置を見つけるにはどうすればよいですか?Python2.7を使用

4

1 に答える 1

15

ここでの最良のオプションは、正規表現を使用することです。Pythonには、正規表現を操作するためreモジュールがあります。

簡単な検索を使用して、"is":の位置を見つけます。

>>> match = re.search(r"[^a-zA-Z](is)[^a-zA-Z]", mystr)

これにより、最初の一致が一致オブジェクトとして返されます。次に、を使用MatchObject.start()して開始位置を取得します。

>>> match.start(1)
8

編集:良い点は、グループを作成"is"し、そのグループを照合して、正しい位置を確実に取得できるようにすることです。

コメントで指摘されているように、これはいくつかの推測をします。1つは、囲まれたとは、文字列の最初または最後に置くことができないことを意味し"is"ます。その場合、これは囲まれた文字列にのみ一致するため、別の正規表現が必要です。

もう1つは、これは数字を特殊文字としてカウントすることです。アルファベット以外の文字を指定しました。これは、含まれる数字を意味します。数字を数えたくない場合は、を使用するr"\b(is)\b"のが正しい解決策です。

于 2012-05-13T13:43:25.307 に答える