【问题标题】:Regular expression match starting at the end of a Sublime Text "view"正则表达式匹配从 Sublime Text“视图”的末尾开始
【发布时间】:2013-10-21 18:31:33
【问题描述】:

我编写了以下正则表达式,它应该给我在倒数第二个 } 之前的视图中的所有文本:

region = currentView.find("(?<=\\})[^\\}]+\\}[^\\}]*$", 0)

Sublime Text 似乎并不认为$ 意味着“视图中的任何内容的结束”。说实话,我不太明白 Sublime Text 到底是什么意思。

我的正则表达式似乎有效,如regexr.com 所示。

我找到了适合我目前可以忍受的特定情况的解决方法:

regions = currentView.find_all("\}")
    if len(regions) > 1:
        # stuff I am doing with regions[-2] goes here

但我想知道是否可能与视图内容的结尾相匹配。

【问题讨论】:

  • $ 在正则表达式中的意思是“字符串结束”。那么你的观点是字符串的结尾吗?
  • 我不太了解 Sublime Text 如何实现它的缓冲区。我想我正在寻找的是一个 end of buffer,我认为 end of string 会起作用...
  • 如果你想构造一个正则表达式,你需要知道一些你期望的输入。然后你详细说明一个模式。那么你能给我们一些意见吗?另外我似乎不明白你为什么使用 \\} ?如果要匹配文字 }\} 还不够吗?
  • @HamZa:我在regexr.com 的链接中提供了一个示例,出于整洁和清晰的原因,我不想弄乱实际问题的主体,因为我的问题 appears 是 Sublime 的 API,而不是实际的正则表达式。上面的正则表达式是python字符串的形式,需要/符号进行转义。

标签: python regex plugins sublimetext2


【解决方案1】:

$ 在正则表达式的末尾可以表示行尾或输入的结尾,具体取决于传入的引擎和修饰符标志。快速查看 Sublime 的文档表明它支持 @ 987654325@ 边界,明确表示“输入缓冲区的结束”。所以试着用\z替换你最后的$,看看是否有帮助。

【讨论】:

  • 太棒了!它正是我想要的。请问您在 Sublime 的文档中哪里找到了答案?我自己确实看得很有弹性!
  • Here in Sublime's doc 最后一句指的是 Boost 语法。然后,在 Boost 的文档中,我们有:Buffer Bundaries
  • 注意对应Sublime的文档地址已经改变:见Sublime Text Community Documentation
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
相关资源
最近更新 更多