【问题标题】:Issue with RegEx lookaround where new lines are included [duplicate]包含新行的 RegEx 环视问题[重复]
【发布时间】:2016-02-11 18:27:58
【问题描述】:

编辑:澄清一下,我使用的是 Sublime 文本。看来问题实际上是多行问题。谢谢大家的反馈!

好的,我正在尝试分析类似这样的文本块:

Private Sub NAV_VE124_Click()
    'Open the picture in its description field
    Call ShowPic(Me.NAV_VE124.Description)
End Sub 

和正则表达式模式(?<=Private Sub )((.*?)(?=_Click))

似乎可以找到NAV_VE124

但由于某种原因(?<=\')((.*?)(?=End))

不产生任何结果...

另外,我想将这两个搜索结合起来,这样我就只在' 之后抓取东西,如果其他条件允许的话,所以关于如何做到这一点的任何想法也将是惊人的。

【问题讨论】:

标签: regex find sublimetext2


【解决方案1】:
(?<=\')((.|\s)*(?=End))

问题是多行...不确定您使用的是什么正则表达式工具,但只需执行 (.|\s)* 即可匹配包括换行在内的任何内容。如果 \s 不起作用,则找出与您的工具匹配的换行符。

【讨论】:

  • 使量词变得懒惰,否则:regex101.com/r/bH5qV7/2
  • 这似乎在 regex101.com 模拟器中有效,但在 Sublime 中无效。不过感谢您的提示:)
  • 不要使用(.|\s),它非常效率低下,正如demo 所示。 (它应该会失败,但它会超时——切换到惰性量词并没有帮助。)大多数风格/工具都支持单行/DOTALL 模式,让点匹配换行符,Sublime Text 就是其中之一.
【解决方案2】:

如果您的正则表达式引擎支持它,您可以提出:

^Private Sub(.+?)(?=_Click).*\R\s+'(?s)(.+?)(?=End)(?s-)

也用 Sublime 测试过。

【讨论】:

  • 嗯.. 我收到“十六进制转义序列无效”的错误
猜你喜欢
  • 2011-06-08
  • 2011-08-13
  • 2013-04-03
  • 2015-01-22
  • 2011-11-04
  • 2021-12-02
  • 1970-01-01
  • 2011-11-18
  • 2019-03-05
相关资源
最近更新 更多