如何解决如何从字符串中的计算器表达式中删除前导零?蟒蛇 输出说明
我对python有疑问
字符串为pip install fyers_api
如何将其转换为“ 123 + 567 * 29 / 3-7”
即使后来我用section '.data' data readable writable ;секция данных
string db 'Hello world',0 ;исходная строка
substring db 'orl',0 ;искомая строка
output db "The substring was encountered %d times",0 ;текст сообщения
section '.code' code readable writable executable ;секция кода
start:
cld ;очищаем флаг направления DF
xor ebx,ebx ;очищаем EBX как счётчик подстрок
mov esi,string ;перемещаем строку в ESI
mov edx,substring ;перемещаем искомую подстроку в EDX
mov ecx,11 ;перемещаем длину строки в ECX
cmp byte [esi],0 ;если строка закончилась,переходим на FINISH
je FINISH
cmp byte [edi],0 ;если подстрока закончилась,переходим на FINISH
je FINISH
SEARCH:
mov al,[edx] ;перемещаем первый символ искомой подстроки в AL
repnz scasb ;пока символы строки не совпадают с данным символом подстроки,проходим
jcxz FINISH ;если строка закончилась,переходим на FINISH
CHECK:
inc edx ;переходим на следующий символ подстроки
cmp byte [edx],0 ;проверяем,закончилась ли искомая подстрока
jz FOUND ;если конец искомой подстроки,переходим на FOUND
inc esi ;переходим на следующий символ строки
dec ecx ;уменьшаем ECX на 1
jcxz FINISH ;если строка закончилась,переходим на FINISH
mov al,[edx] ;перемещаем следующий символ искомой подстроки в AL
cmp byte [esi],al ;проверяем текущий символ строки
jne SEARCH ;если символы не равны,переходим на SEARCH
jmp CHECK ;если символы равны,переходим на CHECK
FOUND:
inc ebx ;увеличиваем EBX
inc esi ;переходим на следующий символ строки
dec ecx ;уменьшаем ECX на 1
jcxz FINISH ;если строка закончилась,переходим на FINISH
jmp SEARCH ;переходим на SEARCH
FINISH:
ccall [printf],output,ebx
ccall [getchar]
stdcall [ExitProcess],0
尝试了Z = "00123+0567*29/03-7"
但它将正确拆分,但要使用与re.split('[+]|[*]|-|/',Z)
解决方法
解决方法
def cut_zeroes(Z):
i,res = 0,[]
n = len(Z)
while i < n:
j = i
while i < n and Z[i] not in '+-/*':
i += 1
res.append(int(Z[j:i]))
if i < n:
res.append(Z[i])
i += 1
return ''.join(map(str,res))
Z = "00123+0567*29/03-700"
print(cut_zeroes(Z))
,
Z = "00123+0567*29/03-7"
print Z
import re
res = re.split(r'(\D)',Z)
print res
empty_lst = []
for i in res :
i = i.lstrip("0")
empty_lst.append(i)
print i
print empty_lst
new_str = ''.join(empty_lst)
print new_str
,
def zero_simplify(Z):
from re import sub
return [char for char in sub("0{2,}","0",Z)]
Z = "00123+0567*29/03-7+0-000"
Z = zero_simplify(Z)
pos = len(Z)-1
while pos>-1:
if Z[pos]=="0":
end = pos
while Z[pos] == "0":
pos-=1
if pos==-1:
del Z[pos+1:end+1]
if (not Z[pos].isdigit()) and (Z[pos] != ".") and (Z[pos] == "0"):
del Z[pos+1:end+1]
else:
pos-=1
Z = "".join(Z)
print(Z)
设置Z
,将其“列出”,然后将pos
设置为Z
中的最后一个位置。然后,它使用循环和0
删除所有不必要的Z = "".join(Z)
。然后最后print
个Z
。如果您希望某个函数删除零,则可以通过以下方式实现它:
def zero_simplify(Z):
from re import sub
return [char for char in sub("0{2,Z)]
def remove_unnecessary_zeroes(Z):
Z = [char for char in Z]
pos = len(Z)-1
while pos>-1:
if Z[pos]=="0":
end = pos
while Z[pos] == "0":
pos-=1
if pos==-1:
del Z[pos+1:end+1]
if (not Z[pos].isdigit()) and (Z[pos] != ".") and (Z[pos] == "0"):
del Z[pos+1:end+1]
else:
pos-=1
Z = "".join(Z)
return Z
Z = "00123+0567*29/03-7+0-000"
print(remove_unnecessary_zeroes(Z))
自己尝试一下,并在评论中告诉我它是否对您有用!
,这是一个简洁的(如果您删除了代码中的所有注释),这是一种优雅的方法:
import re
Z = "00123+0567*29/03-7"
operators = re.findall('\D',Z) # List all the operators used in the string
nums = re.split('\D',Z) # List all the numbers in the list
operators.append('') # Add an empty operator at the end
nums = [num.lstrip('0') for num in nums] # Strip all the leading zeroes from each numbers
# Create a list with the operands (numbers) concatenated by operators
num_operator_list = [nums[i] + operators[i] for i in range(len(nums))]
# Join all the intermediate expressions to create a final expression
final_expression = ''.join(num_operator_list)
print(final_expression)
输出
123+567*29/3-7
说明
首先,您需要将运算符和操作数分开,然后从每个操作数中lstrip
分开零。之后,在操作员列表末尾添加其他空操作员。然后将每个操作数与相应的运算符连接(空运算符与最后一个操作数连接)。最后,加入列表以获得最终表达式。
可以使用正则表达式完成
import re
Z = "00123+0567*29/03-7"
r1=r"(\D)0+(\d+)"
r2=r"\b0+(\d+)"
#substitute non-digit,leading zeroes,digits with non-digit and digits
sub1=re.sub(r1,r"\1\2",Z)
#substitute start of string,digits with digits
sub2=re.sub(r2,r"\1",sub1)
print(sub2)
这是通过两次通过(以处理字符串开头的前导零)完成的,我不知道是否可以一次通过。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。