[英]Python regular expression dot character
我已經通過WiktorStribiżew的建議解決了這個問題。
編輯:我只需要一次提取列表的第一個元素,因為我需要對該數字進行其他操作。 我在代碼中使用循環只是為了測試。
我想將算術表達式拆分為數字列表。
例如:1 + 0.2-(3 ^ 4)* 5-> ['1','0.2','3','4','5']
我在python中使用了re庫,但是表達式以點字符'。'分隔。 盡管我不包括“。” 在發呆者中。
即,當輸入為1 + 0.2時,輸出將為['1','0','2'],應為['1','0.2']
代碼如下:
#!/bin/python
import re
delims = re.compile(r"[+-/*///^)]")
while True:
string = input()
res = list()
i = 0
while i < len(string):
if string[i] >= '0' and string[i] <= '9':
num_str = delims.split(string[i:], 1)[0]
res.append(num_str)
i += len(num_str) - 1
i += 1
print(res)
我真的很感謝對此問題的任何看法!
對re.findall
函數使用以下方法:
num_str = '1+0.2-(3^4)*5'
numbers = re.findall(r'\d(?=[^.]|$)|\d+\.\d+', num_str)
print(numbers)
輸出:
['1', '0.2', '3', '4', '5']
如果您只想提取正整數,請嘗試以下操作。 我已經假設符號和數字之間是空格:
[int(s) for s in str.split() if s.isdigit()]
由於以下三個原因,它比regex示例更好:不需要其他模塊,因為不需要解析regex迷你語言,因此更具可讀性,並且速度更快。
您的方法不起作用的原因是您使用+-/
創建了一個包含點的字符范圍。 我也認為您使事情復雜化了。
import re
str = '1+0.2-(3^4)*5'
res = re.split(r'[-+()/*^]+', str)
print(res)
將輸出['1', '0.2', '3', '4', '5']
請注意,這種方法不能正確處理負數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.