0

使用 Python,我需要在文本文件中搜索字符串“that/”

然后我需要获取行号(目前使用枚举这样做),并打印出“that\”+剩余的文本,直到下一个空格。

示例文本:First/LS thing/NN I/PRP want/VBP to/TO ask/VB is/VBZ if/IN you/PRP remember/VBP any/DT books/NNS that/IN you/PRP read/VBP as/ IN a/DT 孩子/NN

示例输出:that/IN 14

这是我现在拥有的代码,它可以正常运行,但是无论它应该在哪里打印“that/xx”,它什么都不会打印。

with open(filename) as f:
            for num, line in enumerate(f, 1):
                if 'that/' in line:
                    myString = line
                    mySub = myString[myString.find('that/'):myString.find(' ')]
                    print(mySub, str(num))
                    formattedLines.append(mySub + ' ' + str(num) + '\n')
4

3 回答 3

1

我认为myString.find(' ')是问题所在。那可以在 'that/' 之前找到一个字符串,因此您可以尝试获取myString[50:3].

相反,试试这个:

with open(filename) as f:
    for num, line in enumerate(f, 1):
        if 'that/' in line:
            start = myString.find('that/')
            offset = myString[start:].find(' ')
            end = start + offset if offset != -1 else len(myString)
            mySub = myString[start:end]
            print(mySub, str(num))
            formattedLines.append(mySub + ' ' + str(num) + '\n')
于 2012-08-13T19:48:52.987 回答
1

我认为问题在于空格可能发生在that/. 在找到的索引处开始搜索空格that/

with open(filename) as f:
    for num, line in enumerate(f, 1):
        if 'that/' in line:
            myString = line
            where_is_that = myString.find('that/')
            mySub = myString[where_is_that:myString.find(' ', where_is_that)]
            print(mySub, str(num))
            formattedLines.append(mySub + ' ' + str(num) + '\n')
于 2012-08-13T19:51:04.157 回答
1

我决定采用不同的方法,并使用正则表达式:

import re

def analyze(line, word):
    regex = r'\b{0}/[^\W]*'.format(word)
    match = re.search(regex, line)
    return match.group() if match else None

def extract(filename, word):
    output = []
    with open(filename) as f:
        for num, line in enumerate(f, 1):
        result = analyze(line, word)
        if result:
            output.append(result + ' ' + str(num) + '\n')
    return output
于 2012-08-13T21:10:29.157 回答