python 搜索字符串的未知文本并替换它

xzv2uavs  于 2023-09-29  发布在  Python
关注(0)|答案(1)|浏览(98)

我想在数据文件中搜索字符串的一部分并替换它。
如果感兴趣的部分的确切文本是已知的,那么这样做没有问题,但如果确切文本不完全已知,我似乎无法做到这一点。
字符串的内容可能不同(可能是数字或名称或混合)。
字符串从文件中读取,替换,然后写回文件。
我尝试了许多正则表达式语法的组合,并接近,但从来没有我需要的。
我想用0.0 0.0(无逗号)替换感兴趣部分中的任何/所有数字对

**示例:下面代码的 * 结果 * 为:

The Original String
(cat 5.34 8.763) kenneled in:

The Replaced String
(dog 0.0 0.0)5.34 8.763) kenneled in:

我希望替换的字符串为:

(dog 0.0 0.0) kenneled in:

下面是我的代码尝试:

data    = '(cat 5.34 8.763) kenneled in:'  # Section of the String
pattern = '[(cat *? )]+'                 # test the String
repl    = '(dog 0.0 0.0)'              # replace it with this

print('The Original String')
print(data + '\n')

result = re.sub(pattern, repl, data, count=1)

print('The Replaced String')
print(result)

一切都很好,直到我选择了一个包含多个类似字符串的文件-这些额外的字符串可以是不同的/类似的/相同的,我 * 不 * 希望他们改变。
问题是:所有文本/内容都被删除-所有文本(除了第一个字符串)都被删除。
我添加了count=1,但它不工作...

data = re.sub(r"[^(]+ \d+\.?\d* \d+\.?\d*", "at 0.0 0.0", s1, count=1)

我想保留而不受影响的文本示例:

(hound (cat 3.34 5.67)
(hound (cat 3.37 1.67)
(hound (cat 9.85 4.3)
(puppy (cat 6.76 0.123)
brgchamk

brgchamk1#

IIUC,将正则表达式更改为(regex101 demo):

import re

s = "(cat 5.34 8.763) kenneled in:"

s = re.sub(r"[^(]+ \d+\.?\d* \d+\.?\d*", "dog 0.0 0.0", s)
print(s)

图纸:

(dog 0.0 0.0) kenneled in:

相关问题