簡體   English   中英

將re.match / re.search轉換為字符串

[英]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"是因為也有美元。

您那里有幾個問題:

  1. 您只能使用修飾符r打開文件以供閱讀,應該使用r+
  2. 使用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處加上轉換因子即可。 如果您希望更井井有條,則將貨幣改為貨幣名稱,而不是money1money2 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM