【问题标题】:Is there a way to match a specific pattern within curly braces multiple times using regex?有没有办法使用正则表达式多次匹配花括号中的特定模式?
【发布时间】:2020-02-06 13:58:26
【问题描述】:

我使用一种没有任何预建语法高亮显示的旧语言。

虽然 notepad++ 具有用户定义的语言功能,但在某些情况下不受支持。对于这些情况,我使用了一个 python 脚本,该脚本使用正则表达式应用语法高亮。

我目前遇到的问题是使用正则表达式在花括号中查找模式。我要匹配的模式是 [A-Za-z_]\w* 。 所以基本上,一个变量名。但是,我只想匹配出现在双花括号内的实例。

在下面的字符串中,我想匹配 TimeStampsDescending 的两个实例,仅此而已。 Test Test2'{{TimeStamps(Descending(1))(7:8)}}/{{TimeStamps(Descending(1))(1:4)}} - '

我已经尝试过这个(?<={{)([A-Za-z_]\w*)*(?=[0-9\(\)\:]*}}) 的变体,但是感觉我自己把它复杂化了。

感谢任何帮助。提前致谢。

【问题讨论】:

  • 是python的模式还是记事本的模式?您可以使用捕获组 {{(\w+)[^\(]*\(([^()]+).*?}} regex101.com/r/PCvoDi/1
  • 使用{{.*?}},然后使用您的[A-Za-z_]\w*获取先前匹配项中的每个匹配项
  • 不幸的是,python 只是我用来将正则表达式字符串输入 notepad++ 的工具。有一个库采用正则表达式字符串和颜色,并将该颜色应用于所有匹配项。
  • 那么,输入和预期输出是什么?您可以访问 Python 代码吗?你可以使用 PyPi regex 模块而不是 re 吗?
  • 尝试解决方法,[A-Za-z_]\w*(?=(?:(?!{{|}}).)*}})(或[A-Za-z_]\w*(?=(?:(?!{{|}})[\s\S])*}})

标签: regex python-3.x notepad++


【解决方案1】:

你可以使用

\b[A-Za-z_]\w*(?=(?:(?!{{|}}).)*}})

regex demo

详情

  • \b - 单词边界
  • [A-Za-z_] - ASCII 字母或_
  • \w* - 任何 0 个或多个单词字符(字母、数字或 _
  • (?=(?:(?!{{|}}).)*}}) - 一个积极的前瞻,需要
    • (?:(?!{{|}}).)* - 任何不以{{}} 子字符串开头的字符,0 次或多次出现,但换行符除外(它是tempered greedy token
    • }} - }} 子字符串。

【讨论】:

    【解决方案2】:

    您可以使用您的模式来匹配变量,首先匹配{{,然后断言存在一个结束}},而不匹配两者之间的{{

    (?:{{(?=[^{}]*(?:{(?!{)|}(?:!}))*}})|\G(?!^))\(?\K[A-Za-z_]\w*
    
    • (?:非捕获组
      • {{ 字面匹配
      • (?= 正向前瞻,断言右边是
        • [^{}]* 匹配除 {} 之外的任何字符的 0+ 次出现
        • (?:{(?!{)|}(?:!}))* 如果有{} 则断言后面不是同一个字符
        • }} 字面匹配
      • ) 关闭前瞻
      • |或者
    • \G(?!^)在上一场比赛结束时断言位置
    • )关闭群
    • \(?\K 匹配可选 ( 并忘记当前匹配的内容
    • [A-Za-z_]\w* 匹配变量的模式

    Regex demo

    【讨论】:

    • 我只想提一下这个[A-Za-z_]\w*(?=(?:(?!{{|}}).)*}}) 非常适合我的用例。非常感谢您的所有时间。
    • @Axe319 欢迎您。这当然是一个很好的模式,但我认为它也可以匹配没有开头的双卷曲ListHeight + 4}} 你可以要求@WiktorStribiżew 将其作为答案发布并接受他的模式是否更适合您的用例。
    猜你喜欢
    • 2018-08-05
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多