首页 > 解决方案 > PyCharm:函数参数的正则表达式字符串意图

问题描述

我有一个函数,它接受一个字符串参数,该参数将被编译成正则表达式,如下所示:

class Pattern:
    def __init__(self, pattern, **kwargs) -> None:
        self.re = re.compile(pattern)
        self.extras = dict(**kwargs)

    ... more methods ...

当我初始化一个Pattern对象时,我喜欢 PyCharm(实际上,我正在使用带有 Python 插件的 IntelliJ IDEA,但我认为这本质上是同一个平台)知道我的pattern参数字符串应该符合 Python 的正则表达式语法,并且可以突出显示语法,就像使用时一样re.compile(pattern)

# This won't be recognized as a regex intention:
p1 = Pattern(r'^(?P<site>[A-Z]{4}).(?P<unit>\d{4})')
# But this will:
p2 = re.compile(r'^(?P<site>[A-Z]{4}).(?P<unit>\d{4})')

有什么方法可以在这里给 IDE 一个提示,即作为pattern参数传递的任何内容都Pattern应该具有正则表达式语法?理想情况下,我可以在代码中添加某种提示注释或类型提示,这样它也适用于其他开发人员。

我知道:

编辑:

这个问题是“可以自动获得 Intellij 对自己的正则表达式参数的正则表达式帮助”的直接模拟,但是对于 Python 而不是 Java。该答案中的IntelliLang解决方案似乎仅适用于编辑 Java 或 XML 文件。

标签: pythonregexpycharm

解决方案


我找到了一种方法,但它不像我预期的那么顺利。

File - Settings - Editor - Language Injections - Add

  • Generic Python
  • ID:RegExp
  • 地方模式:

+ pyLiteralExpression().and(pyMethodArgument("Pattern", 0, "foo.bar.Pattern"))

现在RegExp将被注入到Pattern.

下一步是分享这个注入。注入是使用IDE级别范围创建的,它存储在IDE无法共享的设置中。

要将此注入到项目设置中,您必须将注入移动到Project- 级别范围(相应的按钮位于添加注入的按钮下方)但随后它停止工作:(唯一的方法是Export-Import注入,但它不方便 :(

随意在这里创建一个问题。


推荐阅读