簡體   English   中英

從 python 復雜的可執行字符串中刪除前導零

[英]Remove leading zeros from python complex executable string

我正在 Python 3.7 上使用語法進化 (GE)。 我的語法生成以下格式的可執行字符串:

np.where(<variable> <comparison_sign> <constant>, (<probability1>), (<probability2>))

然而,字符串可能會變得相當復雜,有幾個鏈接np.where

<constant>在某些情況下包含前導零,這會使可執行字符串產生錯誤。 GE 應該生成包含前導零的表達式,但是,我必須檢測刪除它們。 包含前導零的可能解決方案的示例:

"np.where(x < 02, np.where(x > 01.5025, (0.9), (0.5)), (1))"

問題:

  • 有兩種類型的數字包含前導零:int 和 float。
  • 假設我在字符串中檢測到“02”。 如果我將字符串中出現的所有位置從“02”替換為“2”,浮點數“01.5025”也將更改為“01.525”,這是不可能發生的。

我用不同的re模式做了幾次嘗試,但無法解決。 為了檢測可執行字符串是否包含前導零,我使用:

try:
  _ = eval(expression)
except SyntaxError:
  new_expression = fix_expressions(expression)

我需要幫助構建fix_expressions Python function。

您可以嘗試為帶有前導零的數字提出一個正則表達式,然后替換前導零。

import re

def remove_leading_zeros(string):
    return re.sub(r'([^\.^\d])0+(\d)', r'\1\2', string)

print(remove_leading_zeros("np.where(x < 02, np.where(x > 01.5025, (0.9), (0.5)), (1))"))

# output: np.where(x < 2, np.where(x > 1.5025, (0.9), (0.5)), (1))

remove_leading_zeros function 基本上找到所有出現的[^\.^\d]0+\d並刪除零。 [^\.^\d]0+\d不是數字,也不是后跟至少一個零后跟數字的點。 正則表達式中的括號( , )表示捕獲組,用於保留前導零之前的字符和之后的數字。


關於Csaba Toth的評論:

02+03*04的問題是字符串開頭有一個零。 可以修改正則表達式,使其也匹配第一個捕獲組中字符串的開頭:

r"(^|[^\.^\d])0+(\d)"

您可以使用.lstrip()刪除字符串中的前導 0

str_num = "02.02025"

print("Initial string: %s \n" % str_num)

str_num = str_num.lstrip("0")

print("Removing leading 0's with lstrip(): %s" % str_num)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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