[英]re.search() or 'in', re.match() or startswith()?
[英]Convert re.match/re.search to string
我一直在通過re.match
/ re.search
從我的文件中找到某個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的事實,為什么我在re.sub
保留"coins"
是因為也有美元。
您那里有幾個問題:
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))
def Money1_to_Money2(i) :
Amount = i * 5
print (Amount)
Money1_to_Money2 (10)
這是一種簡單的貨幣對貨幣代碼。 只需將要轉換為下括號的金額加起來,然后在5處加上轉換因子即可。 如果您希望更井井有條,則將貨幣改為貨幣名稱,而不是money1
和money2
; i
等於您在小括號中的金額乘以轉換系數。
從re.search
函數返回的對象是匹配對象,而不是字符串。
這就是為什么您得到錯誤:
AttributeError: '_sre.SRE_Match' object has no attribute 'replace'
要在使用re.search
之后獲取匹配的字符串,請嘗試:
moneyc = moneyc.group()
然后moneyc.replace
將起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.