我一直在考虑让re.match
/ re.search
从我的文件中找到某个int。 int会有所不同,这就是为什么我首先使用正则表达式。这是文件:
Money:
*1,000 coins
*2 dollars
我的代码:
import re
amount = 2
price = 500 * amount
with open("money.txt", "r") as money:
moneyc = money.read()
moneyc = moneyc.strip("Money:")
moneyc = re.search("(\*[^0,][0-9]{0,3})?(,[0-9]{3})?(,[0-9]{3})?", moneyc)
moneyleft = re.sub("(\*[^0,][0-9]{0,3})?(,[0-9]{3})?(,[0-9]{3})? coins", "*"+str(int(moneyc.replace("*", "").replace(",", "")) - price)+" coins")
money.write("Money\n"+moneyleft)
返回错误:
Traceback (most recent call last):
File "C:/***/money.py", line 8, in <module>
moneyleft = re.sub("(\*[^0,][0-9]{0,3})?(,[0-9]{3})?(,[0-9]{3})? coins", "*"+str(int(moneyc.replace("*", "").replace(",", "")) - price)+" coins")
AttributeError: '_sre.SRE_Match' object has no attribute 'replace'
这只是因为正则表达式匹配不是一个字符串,但是因为我需要以某种方式把它变成一个字符串,我该怎么做呢?
我想要的文件是:
Money:
*0 coins
*2 dollars
由于价格为500 * amount
,金额为2.为什么我"coins"
保留re.sub
是因为还有美元。
答案 0 :(得分:0)
你有几个问题:
r
打开文件,您应该使用r+
。locale.atoi
函数验证和转换以逗号分隔的整数。看看这段代码:
import locale
import re
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
recoins = re.compile(r'\*(\S+) coins')
amount = 2
price = 500 * amount
with open('money.txt', 'r+') as money:
text = money.read()
coins = recoins.search(text).group(1)
newcoins = locale.atoi(coins) - price
money.seek(0)
money.truncate()
money.write(recoins.sub('*{:,} coins'.format(newcoins), text))
答案 1 :(得分:0)
def Money1_to_Money2(i) :
Amount = i * 5
print (Amount)
Money1_to_Money2 (10)
这是货币代码的简单货币。
只需将您想要转换的金额添加到较低的括号中,然后在5所在的位置添加转换因子。如果您希望它更有条理,请将您的货币设置为货币名称,而不是money1
和money2
; i
等于您在较低括号中的金额乘以转换因子。
答案 2 :(得分:0)
从re.search
函数返回的对象是匹配对象而不是字符串。
这就是你得到错误的原因:
AttributeError: '_sre.SRE_Match' object has no attribute 'replace'
要在使用re.search
后获取匹配的字符串,请尝试:
moneyc = moneyc.group()
然后moneyc.replace
将有效。