【发布时间】:2017-11-06 12:46:55
【问题描述】:
我想从下面的字符串中提取变量(即用''包围的名称)
案例1:
string = r"RESPONSE(1, -2.532 + 0.779*(LN('Loss_Ratio')) +SELECT(INDEX_FIRST_TRUE('POL_Zero'="No"),2.261,0.0) +SELECT(INDEX_FIRST_TRUE('POL_children'="Si"),0.307,0.0))"
当我申请时
all_variables = list(set(re.findall("'([^']*)'", string)))
我得到正确的结果:
all_variables = ['Loss_Ratio','POL_Zero','POL_children']
但是情况 2(当 POL_Zero 模态改变时)
string = r"RESPONSE(1, -2.532 + 0.779*(LN('Loss_Ratio')) +SELECT(INDEX_FIRST_TRUE('POL_Zero'="Nos' conditional"),2.261,0.0) +SELECT(INDEX_FIRST_TRUE('POL_children'="Si"),0.307,0.0))"
相同的正则表达式会产生错误的结果。我怎样才能在 case2 中也获得正确的结果?
注意名称中不能有单引号或双引号。
【问题讨论】:
-
也许您想使用非单词边界 -
r"\B'([^']*)'\B"- 用于“整个非单词”搜索?或者您只想在(之后匹配这些字符串 -r"\('([^']*)'"?'...'里面可以有"吗?如果没有,请使用"""'([^"']*)'""" -
或者可能仅限于您的两个特定情况并匹配(但不捕获)
=或)在第二个'之后:"('([^']*)')(?:[\)=])" -
戴夫,请说明您的要求,因为您当前的问题听起来太宽泛了。
-
@WiktorStribiżew 很抱歉,您使用 """'([^"']*)'""" 的解决方案解决了我面临的问题。我只是在尝试更多组合来实现它更强大,将您的答案放入并接受它。您的答案是我迄今为止尝试过的最好的答案
-
一旦你确定这是你需要的,请告诉我,我会发布解释。
标签: python regex python-2.7