我想要替换下面txt文件中每个句点.
后面的单词:
line1
line2
field: [orders.cancelled,orders.delivered,orders.reached
orders.pickup,orders.time]
some line
some line
我有一个字典:
d = {'cancelled':'cancelled_at', 'deliver':'xxx'}
我正在运行以下代码。然而,我只获得了部分匹配的结果,即:
我发现新文件包含以下单词:
field: [orders.cancelled_at, orders.xxxed ..........
这里的“delivered”一词是通过将前7个单词(deliver)替换并在末尾添加“ed”而形成的。我不确定为什么会这样。
with open('list.txt', 'r') as g:
text = g.read()
for k in d:
before = f'.{k}'
after = f'.{d[k]}
#print(before)
#print(after)
text = text.replace(before, after)
#print(text)
with open('new_list.txt', 'w') as w:
w.write(text)
我也尝试了这个,结果一样。
import re
with open('list.txt', 'r') as f:
text = f.read()
for k in d:
before = f'.{k}(?!=\w)'
print(before)
after = f'.{d[k]}'
print(after)
text = re.sub(before, after, text)
with open('new_list.txt', 'w') as w:
w.write(text)
\b
单词边界是必要的,只有当字符串中存在整个单词时才匹配,因此short\b
将匹配short.
而不是shorts
。 - Wiktor Stribiżew:\s*\b(?!company\b)(\w+)
,然后代码将引用第一组,即d[x.group(1)]
。 - Wiktor Stribiżew(\w+)
,需要在你列出的一组单词之前有一个或多个单词字符,但是在示例中没有单词字符,你需要删除(\w+)
。关键错误是由于你的匹配从冒号和空格开始,你应该只捕获单词部分。尝试这段Python代码。 - Wiktor Stribiżew