0

当我开始编写一个函数时,我得到了语法错误。我在 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 回答