Регулярное выражение Python для простой текстовой формулы - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь использовать re.split, чтобы легче сказать, является ли формула, использованная в созданной мною программе, действительной или нет, я почти на месте, наверное, но не могу остановиться на второй двойной кавычке наконец привет во втором примере:

import re

s = """c2+"hello"+c4"""
x = re.split("(\".+\"|\+)",s)
# output is correct here ['c2', '+', '', '"hello"', '', '+', 'c4']


# but not here:
s = """c2+"hello""+"c4"""
x = re.split("(\".+\"|\+)",s)
# current output ['c2', '+', '', '"hello""+"', 'c4']
# desired output ['c2', '+', '', '"hello"', '"+"', 'c4']

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете сделать часть внутри двойных кавычек нежадной, используя .+?:

import re

s = """c2+"hello""+"c4"""
x = re.split("(\".+?\"|\+)",s)
print(x)
# ['c2', '+', '', '"hello"', '', '"+"', 'c4']

Обратите внимание, что есть разница с ожидаемым результатом: пустая строка между "hello" и "+».Это сделано специально, чтобы разделители всегда появлялись с нечетными индексами (а остальные части строки с четными индексами) в результирующем списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...