我试图找到一个数字字符串并替换它。例如,假设“ 1998”,然后在当前目录的所有文件中将其替换为“ 1999”。但是,我不想对看起来像“ 1998”的字符串进行这种替换。 (即1998.csv1998.png1998.xlsx等)。我该怎么做呢?我查看了replace()的文档,但没有正则表达式的选项。

inputDir = "."
outputDir = "./test"
find = "1998"
replace = "1999"

for path, dirs, files in os.walk(os.path.abspath(inputDir)):
        for filename in fnmatch.filter(files, filePattern):
            filepath = os.path.join(path, filename)
        with open(filepath) as f:
            s = f.read()
            s = s.replace(find, replace) # second, update all years

最佳答案

您可以找到1998年,并在lookaroundsre.sub之间使用Regex demo断言(?<!\S)之前和之后的(?!\S)不是\S非空白字符。

在替换使用中1999

(?<!\S)1998(?!\S)


您代码中的行可能如下所示:

s = re.sub(r"(?<!\S)1998(?!\S)", "1999", s)


Python demo |

一个例子

import re
regex = r"(?<!\S)1998(?!\S)"
test_str = ("this is 1998\n"
    "1998.csv 1998.png, 1998.xlsx")

result = re.sub(regex, "1999", test_str)

if result:
    print (result)


结果

this is 1999
1998.csv 1998.png, 1998.xlsx 1999


如果后面的内容不能仅是一个点,则另一个选择是使用负前瞻并以单词边界开始1998:

\b1998(?!\.)

07-25 21:40