【问题标题】:How to avoid special character using python regex?如何使用 python 正则表达式避免特殊字符?
【发布时间】: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


【解决方案1】:

您可以利用单引号字符串既不能包含单引号也不能包含双引号这一事实。

只有在这种情况下,

"""'([^"']*)'"""

正则表达式将按预期工作。见the regex demo

这里,

  • ' - 匹配单引号
  • ([^"']*) - 第 1 组(如果您使用的是 re.findall', only this part will be present in the output): zero or more (*) chars other than"and'([^'"]`)
  • ' - 结束单引号。

Python demo:

import re
s = """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))

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))"""
print(re.findall(r"""'([^"']*)'""", s))
# => ['Loss_Ratio', 'POL_Zero', 'POL_children', 'Loss_Ratio', 'POL_Zero', 'POL_children']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2011-01-17
    • 2010-12-13
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多