簡體   English   中英

Python正則表達式點字符

[英]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.

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