PyCharm:函数参数的正则表达式字符串意图

问题描述 投票:2回答:1

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

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

    ... more methods ...

当我初始化一个Pattern对象时,我喜欢PyCharm(实际上,我使用IntelliJ IDEA和Python插件,但我认为这基本上是相同的平台)知道我的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一个提示,那就是patternPattern参数传递的内容应该有正则表达式语法吗?理想情况下,我可以在代码中添加一些提示注释或类型提示,这样它也适用于其他开发人员。

我知道:

  • 我可以为此创建一个插件 - 在我的情况下,这可能是一个巨大的矫枉过正。
  • 对于任何对Pattern(...)的特定调用,我都可以在临时的基础上进行“注入语言或引用” - 但这是暂时的,当有很多这样的调用时,这很乏味,并且它无助于其他开发人员更容易地阅读代码。

编辑:

这个问题是“Can one automatically get Intellij's regex assistance for one's own regex parameters”的直接模拟,但是对于Python而不是Java。该答案中的IntelliLang解决方案似乎仅适用于编辑Java或XML文件。

python regex pycharm
1个回答
1
投票

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

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注射但不方便: (

随意创建一个问题here

© www.soinside.com 2019 - 2024. All rights reserved.