我正在用 python 構建一個模塊,主要關注數學。我認為添加對數學系列的支持會很好。我在實作等差級數和幾何級數方面沒有問題,但是在嘗試實作遞回級數時我偶然發現了一個問題。我想出了一個解決方案,但為此我首先需要從代表系列的用戶輸入字串中提取系列的元素。我認為正則運算式可能是最好的選擇,但它是我最大的世界上的恐懼癥,所以我真的很感激你的幫助。
例如,對于像這樣的字串
"a_n = a_{n-1} a_{n-2}"
我想要一套
{"a_n","a_{n-1}","a_{n-2}"}
它還需要支持更復雜的遞回定義,例如:
"a_n*a_{n-1} = ln(a_{n-2} * a_n)*a_{n-3}"
該集合將是:
{"a_n","a_{n-1}","a_{n-2}","a_{n-3}"}
如果您認為這會使任務更容易,請隨意進行一些小的語法更改。
uj5u.com熱心網友回復:
正則運算式很簡單 a_(?:n|{n-\d})
a_- 然后
- 任何一個
n - 或者
{n-\d}
- 任何一個
import re
ptn = re.compile(r"a_(?:n|{n-\d})")
print(set(ptn.findall("a_n = a_{n-1} a_{n-2}")))
# {'a_{n-1}', 'a_n', 'a_{n-2}'}
print(set(ptn.findall("a_n*a_{n-1} = ln(a_{n-2} * a_n)*a_{n-3}")))
# {'a_{n-1}', 'a_{n-3}', 'a_n', 'a_{n-2}'}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351512.html
上一篇:我怎樣才能讓這里的\\.(....|..)點只是數字[\\.(....|..)0-9]?(Java)正則運算式,匹配?
下一篇:重命名unix命令中的正則運算式
