【问题标题】:Regex to match double underscores?正则表达式匹配双下划线?
【发布时间】:2011-02-04 20:17:40
【问题描述】:

我正在尝试扩展 python.lang 文件,以便突出显示像 __init__ 这样的方法。我一直在尝试想出一个匹配所有__privateMethods() 的正则表达式。

python.lang 是一个 XML 文件,其中包含 Python 文件的所有突出显示规则。例如:

<context id="special-variables" style-ref="special-variable">
   <prefix>(?&lt;![\w\.])</prefix>
   <keyword>self</keyword>
   <keyword>__name__</keyword>
   <keyword>__debug__</keyword>
</context>

如何扩展它以匹配双下划线?


[解决方案]:我在python.lang 文件中添加的内容(如果有人感兴趣):

首先,您需要在定义样式的顶部附近添加此行。

<style id="private-methods" _name="Private Methods" map-to="def:special-constant"/>

然后您将添加 Carles provided in his answer 的正则表达式:

<context id="private-methods" style-ref="private-methods">
    <match>(__[a-zA-Z_]*(__)?)</match>
</context>

这是完成后的样子!

【问题讨论】:

  • 哇!谢谢你的报告

标签: python xml regex gedit


【解决方案1】:

应该是:

(__[a-zA-Z0-9_]*(__)?)

为了匹配以下所有:

__hello()
__init__()
__this_is_a_function()
__this_is_also_a_function__()
__a_URL2_function__()

【讨论】:

  • 谢谢,我知道如何添加它了。
  • @Carles:我更新了我的答案以显示如何添加它。感谢您的所有帮助。
  • @Lucas 不错...但你最终使用了 Mikhail 的正则表达式 ;)
  • @Carles:哎呀!我复制了文件的错误部分。我实际上确实最终使用了你的。 ;)
  • @Carles:我刚刚注意到一个错误。您的解决方案与带有大写字母的单词不匹配。我已经更新了我的问题中的正则表达式来解决这个问题。
【解决方案2】:

使用以下 (rubular example) 匹配您之前的案例:

(^__[a-z]*__$)

【讨论】:

  • @Mikhail 我认为应该是 (^__[a-z]+__$) 以防止匹配____。
  • @OnesimusUnbound:不,我实际上也希望它与第二组下划线匹配。
  • @Lucas McCoy 你的意思是匹配四个下划线?
  • @OnesimusUnbound:我要匹配__methods()__methods__(),所以他的正则表达式没问题。我会稍微修改一下。
  • @OnesimusUnbound:看起来不错,但是当我添加 () 时,它不匹配。我不希望括号突出显示,但它需要匹配它们之前的所有内容。您也应该将其发布为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 1970-01-01
相关资源
最近更新 更多