【问题标题】:Regex: How can I match something enclosed by certain characters?正则表达式:如何匹配某些字符所包含的内容?
【发布时间】:2020-02-02 10:05:06
【问题描述】:

我正在寻找一种方法来使用 python 的re.sub 选择和替换我的字符串中的某个部分。

在我的例子中,字符串是

'SELECT * FROM contacts WHERE "id"=%user.id%;'

% 标志中的内容应该是返回数字、字符串或其他的简短可执行代码。

# having these
user = User(id=123)
'SELECT * FROM contacts WHERE "id"=%user.id%;'

# output should be
'SELECT * FROM contacts WHERE "id"=123;'

还有

# having these
user = User(id=123, name="John Smith")
'''SELECT * FROM contacts WHERE "name"=%user.name.lower().replace(" ", "_")%;'''

# output should be
'''SELECT * FROM contacts WHERE "name"='john_smith';'''

我对正则表达式很陌生,所以我不知道该怎么做。我试过/%\w+/g,但这只会匹配%user,而不是%user.id%。我能做什么?

【问题讨论】:

    标签: python sql regex


    【解决方案1】:

    你可以这样做:

    re.sub(r'%([^%]*)%', lambda m: str(eval(m.group(1))), your_string)
    

    但我不推荐它至少有两个原因:

    • 从用户输入执行任意代码是危险的
    • 将值作为字符串替换到 SQL 中而不正确引用它们也是危险的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多