3

テキスト内の特定の行を別の文字列に置き換えたいです。これまでのところ、置き換えたいテキストを見つけることができました:

text = open('sample','r').read()
regex = re.compile('.*#= min, max\s')
for match in regex.finditer(text):
    print match.group(0) #this is what i want to replace

編集:また試しました

text = open('sample','r').read().split('\n')
for line in text:
    line = re.sub('.*#= min, max\s', "HOLA", line)

テキストはそのままです。私の正規表現が台無しになっている可能性がありますか?同じものを別の場所で使用しましたが、問題はありませんでした。また、単純な正規表現です。

別の回線に切り替えるにはどうすればよいですか?ありがとう!

4

3 に答える 3

1

試す:

subbedlines = []

with open('sample','r') as textreader:
    lines = textreader.read().split('\n')

for line in lines:
    subbedlines.append(re.sub('.*#= min, max\s', "HOLA", line))

正規表現が正しく、テキスト ファイル内の行が一致している場合は機能するはずです。ファイルを再度書き込むには、次のようにします。

with open('sample','w') as textwriter:
    for line in subbedlines:
        textwriter.write("%s\n" % line)
于 2012-09-12T09:31:09.213 に答える
1

私はあなたが何を望んでいるかを理解しているかどうかわかりません。ただし、regexオブジェクトのsub()関数は、次のように置き換えたいテキストで呼び出すことができます。

regex.sub("new text", text)

または、次のように、一致オブジェクトを受け取り、置換するテキストを返す関数を使用します。

def reverse(match):
    return match.group(0)[-1::-1]
    # or do whatever else you might want to do
regex.sub(reverse, text)

そのため、何を置き換えるかを完全に自由に決めることができます。

.*正規表現が貪欲であるため、これは最後の部分のみを置き換える可能性があることに注意してください。$(行末)、^(行頭)、.*?(貪欲でないバージョン)、そしておそらくreオプションで作業してくださいMULTILINE

于 2012-09-12T08:34:06.890 に答える
0

理解できないかもしれませんが、次のようにすべてを置き換えるのではなく、行ごとに繰り返すのはなぜですか。

import re

with open("text.txt") as text:
    new_text = re.sub("jj", "xx", text.read())
    with open("newtext.txt", "w") as result:
        result.write(new_text)

しかし、多分私は何かが欠けています。

于 2012-09-12T11:20:39.070 に答える