Как разбить строку, которая является математическим выражением, на отдельные части (включая операторы)

Вы можете сделать это как:

val df = sqlContext.emptyDataFrame
if( df.eq(sqlContext.emptyDataFrame) )
    println("empty df ")
else 
    println("normal df")
1
задан Jack Moody 16 January 2019 в 00:10
поделиться

4 ответа

Некоторые отличные решения, использующие stdlib, вот чистая попытка Python:

0
ответ дан Charles Landau 16 January 2019 в 00:10
поделиться

Вы можете использовать регулярное выражение:

import re
s = "1+22-3*4/5"
re.split('(\W)', s)

Вывод

['1', '+', '22', '-', '3', '*', '4', '/', '5']
0
ответ дан Jack Moody 16 January 2019 в 00:10
поделиться

Вы можете использовать itertools.groupby с str.isdigit в качестве ключевой функции:

from itertools import groupby
[''.join(g) for _, g in groupby(n, key=str.isdigit)]

Это возвращает:

['1', '+', '22', '-', '3', '*', '4', '/', '5']
0
ответ дан blhsing 16 January 2019 в 00:10
поделиться

Я предлагаю вам обработать символы строки по порядку (для ch в str) и либо (а) добавить их в свой список; или (б) накапливать их в число:

str = "1+22-3*4/5"
tokens = []
number = None
operators = "+-*/"
digits = "0123456789"

for ch in str:
    if ch in operators:
        if number is not None:
            tokens.append(number)
        tokens.append(ch)
        continue
    elif ch in digits:
        if number is None:
            number = ch
        else:
            number += ch
        continue
    else:
        # what else could it be?
        pass

# After loop, check for number at end 
if number is not None:
   tokens.append(number)
0
ответ дан aghast 16 January 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: