0

1 つの関数を書き始めたときに、構文エラーが発生しました。REPL で行を実行しようとしましたが、うまくいきました。しかし、IDEでやりたいです。誰か助けてくれませんか?

私のコード:

def sentence_splitter(file_name):
    with open(file_name) as f:
        input_str = f.read()
        period_indexes = get_periods(input_str)
        for el in period_indexes:
            sub_str = input_str[el - 14:el + 14]
            if not re.search(r'\.\s+[A-Za-z]{1,3}\w+', sub_str) and # Error here
            re.search(r'\.\d+', sub_str) and
            re.search(r'\.\s+[a-z]+', sub_str) and
            re.search(r'([A-Za-z\.]+\.\w+){1,50}', sub_str) and
            re.search(r'\w+\.[\.,]+', s):
                pass
4

3 に答える 3

3

if ステートメントを括弧で囲む必要があります。

def sentence_splitter(file_name):
    with open(file_name) as f:
        input_str = f.read()
        period_indexes = get_periods(input_str)
        for el in period_indexes:
            sub_str = input_str[el - 14:el + 14]
            if not (re.search(r'\.\s+[A-Za-z]{1,3}\w+', sub_str) and # Error here
            re.search(r'\.\d+', sub_str) and
            re.search(r'\.\s+[a-z]+', sub_str) and
            re.search(r'([A-Za-z\.]+\.\w+){1,50}', sub_str) and
            re.search(r'\w+\.[\.,]+', s)):
                pass

技術的にはバックスラッシュは機能しますが、括弧はより Pythonic です。PEP8 を参照してください: http://www.python.org/dev/peps/pep-0008/#maximum-line-length

于 2013-11-11T18:32:27.840 に答える
2

条件が複数行にまたがっています。行継続文字を追加する必要があります\

if not re.search(r'\.\s+[A-Za-z]{1,3}\w+', sub_str) and \
            re.search(r'\.\d+', sub_str) and \
            re.search(r'\.\s+[a-z]+', sub_str) and \
            re.search(r'([A-Za-z\.]+\.\w+){1,50}', sub_str) and \
            re.search(r'\w+\.[\.,]+', s):

これに関する詳細情報は、PEP8およびこの回答で入手できます。

コードに固有の注意事項:

re.search(r'\w+\.[\.,]+', s)
                          ^---- This variable is not assigned 
                                (likely should be sub_str)
于 2013-11-11T18:35:42.397 に答える
1

最後の正規表現で:

re.search(r'\w+\.[\.,]+', s)

s定義されていないに対して検索を実行します。他のすべての正規表現は で検索を実行しますがsubstr、これはおそらくあなたが望むものです。それはNameErrorではなく を発生させSyntaxErrorます。

さらに、質問に対する私のコメントで説明されているように、コードをリファクタリングして読みやすくすることをお勧めします。

于 2013-11-11T18:33:15.983 に答える