0

Pythonを使って、テキストファイルの「O」(大文字のオー)を「0」に置き換えるタスクをもらいました。ただし、1 つの条件は、Over、NATO などの他の単語を保持する必要があることです。900 から 900、2006 から 2006 などの単語のみを置き換える必要があります。私はたくさん試しましたが、まだ成功していません。私のコードを以下に示します。どなたか助けてください。前もって感謝します

import re

srcpatt = 'O'
rplpatt = '0'
cre = re.compile(srcpatt)

with open('myfile.txt', 'r') as file:
    content = file.read()

wordlist = re.findall(r'(\d+O|O\d+)',str(content))
print(wordlist)

for word in wordlist:
    subcontent = cre.sub(rplpatt, word)
    newrep = re.compile(word)
    newcontent = newrep.sub(subcontent,content)

with open('myfile.txt', 'w') as file:
    file.write(newcontent)

print('"',srcpatt,'" is successfully replaced by "',rplpatt,'"')
4

3 に答える 3

1

re.sub置換関数を使用できるため、これをかなりうまく切り詰めることができます。

import re
with open('myfile.txt', 'r') as file:
    content = file.read()
with open('myfile.txt', 'w') as file:
    file.write(re.sub(r'\d+[\dO]+|[\dO]+\d+', lambda m: m.group().replace('O', '0'), content))
于 2013-06-13T21:22:41.820 に答える
0

おそらく、先頭の数字の後にO. これは を処理しませんが、たとえば、OO7うまく機能します。8080末尾の数字に一致する答えはどれもありません。これを行うには、先読み一致を使用する必要があります。

re.sub(r'(\d)(O+)', lambda m: m.groups()[0] + '0'*len(m.groups()[1]), content)
于 2013-06-13T21:21:43.147 に答える
0
import re

srcpatt = 'O'
rplpatt = '0'
cre = re.compile(srcpatt)
reg = r'\b(\d*)O(O*\d*)\b'

with open('input', 'r') as f:
    for line in f:
        while re.match(reg,line): line=re.sub(reg, r'\g<1>0\2', line)
        print line

print('"',srcpatt,'" is successfully replaced by "',rplpatt,'"')
于 2013-06-13T21:24:17.123 に答える