python - 如何使用 python 正则表达式避免特殊字符?

标签 python regex python-2.7

我想从以下字符串中提取变量(即用“”包围的名称)

案例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 中如何仍然获得正确的结果?

请注意名称中不能有单引号或双引号。

最佳答案

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

仅在这种情况下,

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

正则表达式将按预期工作。请参阅the regex demo .

这里,

  • ' - 匹配单引号
  • ([^"']*) - 第 1 组(如果您使用 re.findall',则只有这部分会出现在输出中):零个或多个 (*) "'([^'"]`)以外的字符
  • ' - 结束单引号。

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']

关于python - 如何使用 python 正则表达式避免特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137391/

相关文章:

python pandas 没有连接到空 DataFrame 中

regex - 查找所有不同的正则表达式结果,而不是全部在一行中

c# - 带空格的阿拉伯语正则表达式

python - 如何在 CentOS 上降级 python 版本?

python - 如何使用 Python 在邮件正文中建立链接

python - 使用 BeautifulSoup4 和 Python 3 解析 html 表

python - 无法同步数据库 “DatabaseError: no such table: django_site”

javascript - 组合两个正则表达式

python - 加速 Python 迭代

python - 如何准确合并两个具有完全不同列的不同 DataFrame