[英]string operation/regex - find and replace
我试图在.
在下面的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 ..........
这里从交付的词来看,程序仍在替换前 7 个词(交付)并在最后添加“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)
您可以使用
import re
d = {'cancelled':'cancelled_at', 'deliver':'xxx'}
rx = re.compile(fr"(?<=\.)(?:{'|'.join(d)})\b")
with open('list.txt', 'r') as f:
print( re.sub(rx, lambda x: d[x.group()], f.read()) )
代码生成的正则表达式看起来像
(?<=\.)(?:cancelled|deliver)\b
请参阅正则表达式演示。 细节:
(?<=\\.)
- 一个正面的lookbehind,它匹配紧跟在文字前面的位置.
(?:cancelled|deliver)
- 两种选择: cancelled
或deliver
\\b
- 作为整个单词, \\b
是单词边界。 lambda x: d[x.group()]
替换用相应的字典键值替换匹配的单词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.