我不知道這是否正確,但我想要提出一些可以從數學表達式中提取係數和指數的正則表達式。表達式將以'axB + cxD + exF'的形式出現,其中小寫字母是係數,大寫字母是指數。我有一個正則表達式可以匹配他們兩個,但我想知道我是否可以使用2個正則表達式,一個匹配係數,一個指數。有沒有辦法將一個數字與其中一面的字母匹配而不匹配該字母? EG,在'3x3 + 6x2 + 2x1 + 8x0'我需要得到 ['3','6','2','8'] 和 ['3','2','1', '0']Python的正則表達式 - 條件匹配?
0
A
回答
5
您可以使用positive look-ahead來匹配其他內容。爲了匹配係數,你可以使用:
>>> s = '3x3+6x2+2x1+8x0'
>>> re.findall(r'\d+(?=x)', s)
['3', '6', '2', '8']
從re
模塊的文檔:
(?= ...) 匹配,如果...下一個相匹配,但不消耗任何字符串。 這被稱爲超前斷言(lookahead assertion)。 例如,Isaac(?= Asimov)將 匹配'Isaac',只有遵循'Asimov'的 。
對於指數,你可以使用positive look-behind代替:
>>> s = '3x3+6x2+2x1+8x0'
>>> re.findall(r'(?<=x)\d+', s)
['3', '2', '1', '0']
再次,從文檔:
(?< = ...)匹配,如果在當前位置字符串前面是 ......的匹配,以當前位置結束。 這稱爲積極向後看 斷言。 (?< = abc)def會在abcdef中找到一個 匹配項,因爲反向查看 將備份3個字符,並檢查包含的模式是否匹配 。
1
>>> import re
>>> equation = '3x3+6x2+2x1+8x0'
>>> re.findall(r'x([0-9]+)', equation)
['3', '2', '1', '0']
>>> re.findall(r'([0-9]+)x', equation)
['3', '6', '2', '8']
1
另一種方式做到這一點,沒有正則表達式:
>>> eq = '3x3+6x2+2x1+8x0'
>>> op = eq.split('+')
['3x3', '6x2', '2x1', '8x0']
>>> [o.split('x')[0] for o in op]
['3', '6', '2', '8']
>>> [o.split('x')[1] for o in op]
['3', '2', '1', '0']
相關問題
- 1. 在正則表達式條件匹配
- 2. 正則表達式匹配mongoid條件
- 3. 正則表達式匹配條件
- 4. 正則表達式:匹配條件
- 5. 匹配正則表達式條件
- 6. Python文件正則表達式匹配
- 7. 的Python - 有條件的正則表達式匹配
- 8. Python 3:匹配2個獨立條件的正則表達式
- 9. 條件(|)匹配的python正則表達式
- 10. Python正則表達式 - 模式匹配
- 11. Python的正則表達式匹配
- 12. Python的正則表達式匹配{}
- 13. Python的正則表達式匹配## ##
- 14. Python中的正則表達式匹配
- 15. Python的正則表達式不匹配
- 16. Python的URL匹配(正則表達式)
- 17. Python中的正則表達式匹配
- 18. Python的正則表達式匹配
- 19. Python的 - 非正則表達式匹配
- 20. Perl正則表達式 - 打印匹配的條件正則表達式
- 21. Python正則表達式匹配鞋號
- 22. Python正則表達式不匹配行
- 23. 正則表達式匹配 - Python
- 24. 加速python正則表達式匹配
- 25. Python正則表達式匹配異常
- 26. Python正則表達式匹配日期
- 27. python正則表達式CIDR匹配
- 28. Python正則表達式匹配:## ##
- 29. Python不匹配正則表達式
- 30. Python正則表達式不匹配
你不需要(+ - )? – 2009-05-30 23:49:09
我只是給係數添加了符號...如果有+,那麼我忽略它,並且它旁邊的係數是正值。如果有 - 那麼我只需在\ d之前添加一個 - *就可以了,它工作得很好。 – 2009-05-31 12:50:03