0

Python を使用して、テキスト ファイルで文字列 "that/" を検索する必要があります。

次に、行番号を取得し (現在は enumerate を使用して行っています)、次のスペースまで "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 child/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

別のアプローチを取り、正規表現を使用することにしました。

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 に答える
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 に答える