gpt4 book ai didi

python - 如何使用re搜索负数?

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:09 32 4
gpt4 key购买 nike

我有一个脚本,打开后会从用户那里获取一个整数并将其保存为结果[1]

然后它打开 myfile.config 并在字符串后搜索整数。该字符串为 locationID=。因此带有数字的字符串应如下所示:

locationID="34"

或者任何随机数。它将当前数字替换为结果中的数字。

到目前为止,我的脚本会检查 locationID= 后是否有号码以及是否没有列出号码。

如何让它检查并替换负数?

原文如下:

def replaceid:

source = "myfile.config"
newtext = str(results[1])
with fileinput.FileInput(source, inplace=True, backup='.bak') as file:
for line in file:
pattern = r'(?<=locationId=")\d+' # find 1 or more digits that come
# after the string locationid

if re.search(pattern, line):
sys.stdout.write(re.sub(pattern, newtext, line)) # adds number after locationid
fileinput.close()
else:
sys.stdout.write(re.sub(r'(locationId=)"', r'\1"' + newtext, line)) # use sys.stdout.write instead of "print"
# using re module to format
# adds a location id number after locationid even if there was no number originally there
fileinput.close()

这对我不起作用:

def replaceid:

source = "myfile.config"
newtext = str(results[1])
with fileinput.FileInput(source, inplace=True, backup='.bak') as file:
for line in file:
pattern = r'(?<=locationId=")\d+' # find 1 or more digits that come
# after the string locationid
patternneg = r'(?<=locationId=-")\d+'

if re.search(pattern, line):
sys.stdout.write(re.sub(pattern, newtext, line)) # adds number after locationid
fileinput.close()

elif re.search(patternneg, line): # if Location ID has a negative number
sys.stdout.write(re.sub(patternneg, newtext, line)) # adds number after locationid
fileinput.close()

else:
sys.stdout.write(re.sub(r'(locationId=)"', r'\1"' + newtext, line)) # use sys.stdout.write instead of "print"
# using re module to format
# adds a location id number after locationid even if there was no number originally there
fileinput.close()

最佳答案

由于您没有使用匹配的数字(无论是正数还是负数),您可以更改模式以匹配双引号 .([^"]+) 之间的任何内容。即使它不是数字

pattern = r'(?<=locationId=").([^"]+)'

覆盖空的情况""您可以将模式更改为 .([^"]*) 。另外,您可能希望扩展 locationId 之前/之后有空格的情况的模式。类似 r'(?<=locationId")\s*=\s*.([^"]*)' .

关于python - 如何使用re搜索负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44460538/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com