在文件中找到某个环境中的数字并修改它
find a number in a certain environment in a file and modify it
我有一个大文件,其中包含许多特定语法的出现:(width 0.15)
。
数字0.15
可以是任意浮点数。我希望找到这些数字的所有实例并修改它们。我知道如何使用 float('0.15')+modifier
修改它们,我也知道如何再次生成结果字符串。
我找不到号码。我查看了 re
模块,但不太清楚如何匹配数字本身以及不包括匹配的环境。
所以我知道如何使用 re
匹配整个环境 (width 0.15)
中出现的所有事件。我知道如何修改数字字符串。但我不知道如何匹配环境中的实际数字。如何做到这一点?
IIUC,你可以使用环视:
s = '(width 0.15)'
match = re.search('(?<=\(width )\d+(?:\.\d*)?(?=\))', s)
输出:
match.group()
# '0.15'
所有出现 + 转换为浮点数:
out = list(map(float, re.findall('(?<=\(width )\d+(?:\.\d*)?(?=\))', )s))
输出:
[0.15]
正则表达式:
(?<=\(width ) # match should be preceded by "(width "
\d+ # one or more digits
(?:\.\d*)? # optionally, a dot with zero or more digits
(?=\)) # match should be followed by ")"
我有一个大文件,其中包含许多特定语法的出现:(width 0.15)
。
数字0.15
可以是任意浮点数。我希望找到这些数字的所有实例并修改它们。我知道如何使用 float('0.15')+modifier
修改它们,我也知道如何再次生成结果字符串。
我找不到号码。我查看了 re
模块,但不太清楚如何匹配数字本身以及不包括匹配的环境。
所以我知道如何使用 re
匹配整个环境 (width 0.15)
中出现的所有事件。我知道如何修改数字字符串。但我不知道如何匹配环境中的实际数字。如何做到这一点?
IIUC,你可以使用环视:
s = '(width 0.15)'
match = re.search('(?<=\(width )\d+(?:\.\d*)?(?=\))', s)
输出:
match.group()
# '0.15'
所有出现 + 转换为浮点数:
out = list(map(float, re.findall('(?<=\(width )\d+(?:\.\d*)?(?=\))', )s))
输出:
[0.15]
正则表达式:
(?<=\(width ) # match should be preceded by "(width "
\d+ # one or more digits
(?:\.\d*)? # optionally, a dot with zero or more digits
(?=\)) # match should be followed by ")"