![](/img/trans.png)
[英]How to remove leading zeros from the calculator expression in a string? 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))"
問題:
我用不同的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.