3

データを抽出するために、後読みと先読みで re.findall を使用しようとしています。raw_input 変数を使用していない場合、正規表現は正常に機能しますが、ユーザーがさまざまな検索用語を入力できるようにする必要があります。

現在のコードは次のとおりです。

me = re.findall(r"(?<='(.+)'+variable+'(.+)')(.*?)(?='(.+)+variable+(.+)')", raw)

ご覧のとおり、1 つの検索語の間にある文字列を抜き出そうとしています。

ただし、このタイプのフォーマットを使用するたびに、固定幅エラーが発生します。とにかくこのあたりはありますか?

次の形式も試しましたが、成功しませんでした。

variable = raw_input('Term? ')
'.*' + variable + '.*'

'.*%s.*' % (variable, )

'.*{0}.*'.format(variable)

 '.*{variable}.*'.format(variable=variable)
4

3 に答える 3

0

これがあなたの言っていることかどうかはわかりませんが、それで始められるかもしれません。私があなたの質問を理解している限り、あなたは先読みや後読みを必要としません。これはPython2.x用です(Python 3では動作しません):

>>> import re
>>> string_to_search = 'fish, hook, swallowed, reeled, boat, fish'
>>> entered_by_user = 'fish'
>>> search_regex = r"{0}(.+){0}".format(entered_by_user)
>>> match = re.search(search_regex, string_to_search)
>>> if match:
...     print "result:", match.group(1).strip(' ,')
...
result: hook, swallowed, reeled, boat

上記のコメントのように、結果の最後の「魚」が本当に必要な場合は{0}、文字列から2番目の魚を削除してくださいformat()

于 2012-12-27T20:03:18.660 に答える
0

後読みの通常の実装方法 (Python の実装を含む) には固有の制限があり、残念ながら、後読みは可変長にすることはできません。ここの「後読みに関する重要な注意事項」セクションでその理由を説明しています。ただし、後読みなしで正規表現を実行できるはずだと思います。

于 2012-12-27T18:52:52.037 に答える