我对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)
解决方法
答案 0 :(得分:1)
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))
答案 1 :(得分:1)
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
答案 2 :(得分:1)
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,}", "0", 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))
自己尝试一下,并在评论中告诉我它是否对您有用!
答案 3 :(得分:0)
这是一个简洁的(如果您删除了代码中的所有注释),这是一种优雅的方法:
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
分开零。之后,在操作员列表末尾添加其他空操作员。然后将每个操作数与相应的运算符连接(空运算符与最后一个操作数连接)。最后,加入列表以获得最终表达式。
答案 4 :(得分:0)
可以使用正则表达式完成
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, leading zeroes, digits with digits
sub2=re.sub(r2,r"\1",sub1)
print(sub2)
这是通过两次通过(以处理字符串开头的前导零)完成的,我不知道是否可以一次通过。