-1

正確に 173754 個の文字列 (以前にテキスト ファイルから読み取ったもの) の大きなリストをループすると、正規表現との一致を探す if ステートメントがあります。そのようです:

def filtering(a_list):
    for i in a_list:
            if re.search(r'\d{0,1}\s+Contacts;\s*', i) is not None:

私がやろうとしているのは、一致が発生した後、次の 5 つの要素を 2 番目のリストに自動的に追加することです。これらの 5 つの要素に対して個別に正規表現を記述することはできません。これらには特別な形式や値がないためです。私にできることは、実際に欲しい情報の前にあるこの要素を把握することだけです。

連続する五行をどう捉えるか。

一致のインデックスを追加してから、次の 5 つの要素をスライスで取得しようとしましたが、問題はリストに多くの重複があるため、明らかに常に最初に低いインデックスを返します。

この関数は、テキスト ファイルを読み込んでわずかにフォーマットした直後に呼び出されます。

#Read in input file and somewhat format the text.
test_cases = open('input.txt', 'r')
for i in test_cases:
    if len(i) < 64 or i != ';':
        k = ';'.join(' '.join(line.split()) for line in i.split('\n'))
        #print(k)
        my_list.append(k)
#call first cleaning function with the formatted list as input. then close file
filtering(my_list)
test_cases.close()
4

1 に答える 1

0

あなたはこれを探していますか:

def filtering(a_list):
    results = []
    for i, item in enumerate(a_list):
        if re.search(r'\d{0,1}\s+Contacts;\s*', item) is not None:
            results.extend(a_list[i+1:i+6])
于 2013-05-31T08:26:15.973 に答える