我有这个字符串:
string="R$ 35.0123. "
我想要清理它,最后点到最后一点和那个空间。看起来像这样:
string:"R$ 35.0123"
我正在尝试使用它:
while string[-1].isdigit()==False:
string=string[:-1]
但是我收到了这个错误:
IndexError: list index out of range
奇怪的是我在for循环中运行它,如果循环列表只有一个项目,它工作正常。如果列表有两个项目,则会出现此问题。
有什么想法吗? 祝你们圣诞快乐。
以下完整代码 (字符串是变量“valor”)
if CNPJ in page:
CNPJloc=[]
for i in (re.finditer(CNPJ,page)):
CNPJloc.append(i.start())
for i in CNPJloc:
CNPJposition=i
beg_string=["aviao"]
end_string="sicon"
for i in beg_string:
if i in lower_page[CNPJposition-200:]:
beg_string=i
extrato_de_contrato=page[lower_page.rfind(beg_string,0,CNPJposition):lower_page.find(end_string,CNPJposition)]
lower_extrato=extrato_de_contrato.lower()
def valor():
valor=["valor do contrato:","valor:"]
for i in valor:
if i in lower_extrato:
valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))]
while valor[-1].isdigit()==False:
valor=valor[:-1]
print("Valor Total: ", valor)
return valor
valor()
答案 0 :(得分:0)
Python内置了使用rstrip
string.rstrip('. ')
输出
'R$ 35.0123'
听起来你只需要删除最后一个点以及之后的所有内容。使用正则表达式
import re
re.sub('(\.[^.]*)$', '', string)
答案 1 :(得分:0)
您可能遇到的字符串不符合您的格式,并且不包含任何数字。
尝试通过添加len(x) > 0
指标保护您的循环:
while len(string) > 0 and not string[-1].isdigit():
del string[-1]
如果您只想从字符串中提取整数,我建议使用正则表达式:
import re
matches = re.findall('\d+\.?\d*', string)
string = int(matches[0]) if len(matches) > 0 else 0
答案 2 :(得分:0)
我发现了问题......旧的缩进错误:
而不是:
def valor():
valor=["valor do contrato:","valor:"]
for i in valor:
if i in lower_extrato:
valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))]
while valor[-1].isdigit()==False:
valor=valor[:-1]
它应该像:
def valor():
valor=["valor do contrato:","valor:"]
for i in valor:
if i in lower_extrato:
valor=extrato_de_contrato[lower_extrato.rfind(i)+len(i):lower_extrato.find("fonte",lower_extrato.rfind(i))]
--> while valor[-1].isdigit()==False:
--> valor=valor[:-1]