我试图找到一个数字字符串并替换它。例如,假设“ 1998”,然后在当前目录的所有文件中将其替换为“ 1999”。但是,我不想对看起来像“ 1998”的字符串进行这种替换。 (即1998.csv
,1998.png
,1998.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年,并在lookarounds和re.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(?!\.)