有没有办法将字符串中的?:运算符转换为python条件语句?
我正在使用python解析一个文本文件,其中包含三元运算符a?b:c 如果a else c,我想将?:运算符转换为python条件语句b 例如:有没有办法将字符串中的?:运算符转换为python条件语句?,python,Python,我正在使用python解析一个文本文件,其中包含三元运算符a?b:c 如果a else c,我想将?:运算符转换为python条件语句b 例如: expression = "(2.4**l2) + 8.0*( (l3>=l4) ? k2:k3 )" converted_expression = "(2.4**l2) + 8.0*(k2 if (l3>=l4) else k3 )" 嗯,这可能有点有限,但您可以使用以下方法: converted_expression = "(2.4*
expression = "(2.4**l2) + 8.0*( (l3>=l4) ? k2:k3 )"
converted_expression = "(2.4**l2) + 8.0*(k2 if (l3>=l4) else k3 )"
嗯,这可能有点有限,但您可以使用以下方法:
converted_expression = "(2.4**l2) + 8.0*([k3,k2][bool(l3>=l4)])"
bool(…)部分将返回False或True,这将分别自动转换为0和1作为列表索引。嗯,这可能有点有限,但您可以使用以下方法:
converted_expression = "(2.4**l2) + 8.0*([k3,k2][bool(l3>=l4)])"
bool(…)部分将返回False或True,并将其分别自动转换为0和1作为列表索引。使用正则表达式如何?这个特殊的正则表达式不关心空间,为了清晰起见,它使用命名的捕获组
import re
regex = re.compile(r'\((?P<cond>.*)\) ?\? ?(?P<if_true>.+):(?P<if_false>.+)')
string = '(l3>=l4) ? k2:k3'
match = regex.search(string)
print('{if_true} if {cond} else {if_false}'.format(if_true=match.group('if_true'),
cond=match.group('cond'),
if_false=match.group('if_false')))
# k2 if l3>=l4 else k3
重新导入
regex=re.compile(r'\(?P.*)?\??(?P.+):(?P.+)'))
字符串='(l3>=l4)?k2:k3'
match=regex.search(字符串)
打印({if\u true}if{cond}else{if\u false})。格式(if\u true=match.group('if\u true'),
cond=match.group('cond'),
if_false=match.group('if_false'))
#如果l3>=l4,则为k2,否则为k3
使用正则表达式怎么样?这个特殊的正则表达式不关心空间,为了清晰起见,它使用命名的捕获组
import re
regex = re.compile(r'\((?P<cond>.*)\) ?\? ?(?P<if_true>.+):(?P<if_false>.+)')
string = '(l3>=l4) ? k2:k3'
match = regex.search(string)
print('{if_true} if {cond} else {if_false}'.format(if_true=match.group('if_true'),
cond=match.group('cond'),
if_false=match.group('if_false')))
# k2 if l3>=l4 else k3
重新导入
regex=re.compile(r'\(?P.*)?\??(?P.+):(?P.+)'))
字符串='(l3>=l4)?k2:k3'
match=regex.search(字符串)
打印({if\u true}if{cond}else{if\u false})。格式(if\u true=match.group('if\u true'),
cond=match.group('cond'),
if_false=match.group('if_false'))
#如果l3>=l4,则为k2,否则为k3
示例中的表达式非常简洁;大量的空格等。情况总是这样吗?@Ev.Kounis不,它可能是任何东西:(我会找到“?”标记,并提取标记(具有偶数个打开/关闭参数)以获得左侧和右侧标记,然后对最右侧的标记:
。如果没有任何嵌套的“?”标记,也可以使用相同的方法表达式您在示例中使用的表达式非常干净;有大量空格等。是否总是这样?@Ev.Kounis不可能是任何东西:(我会找到“?”标记,并提取标记(使用偶数个打开/关闭参数)若要获取左和右标记,则对最右边的标记(:
)执行相同的操作。如果没有任何嵌套的“?”表达式,则可以执行此操作。OP希望创建一个字符串,而不是计算表达式。@DeepSpace噢。我认为问题在于一行python等价于ternar(条件?如果为true:如果为false)operator.OP想要创建一个字符串,而不是对表达式求值。@DeepSpace噢。我认为问题在于一行python等价于ternar(条件?if true:if false)运算符。