【问题标题】:regex - limit word match to the line starting with a specific word正则表达式 - 将单词匹配限制为以特定单词开头的行
【发布时间】:2016-04-14 21:06:22
【问题描述】:

我无法解决这个问题。在以“@....”开头的行列表中,我想创建一个表达式 首先:将匹配限制在以“@property”开头的行。
第二:仅将匹配行上的单词捕获到单个组中 额外:排除所有以破折号'-t'开头的单词/标签

我可以使用正向外观(ahead|behind)匹配以“@property”开头的行,但是,我无法仅匹配到行尾的单词。

我正在使用它为 sublime 文本包创建语法突出显示。

regex editor - link to expression

【问题讨论】:

  • 规则不太清楚。你能详细说明一下吗?
  • 您可以使用新的 regex 模块来使用 \G 构造。使用这个,它可以用一个单步正则表达式来完成。否则,您将不得不通过回调(2 个步骤)来完成。匹配整行^@,,,,,,$ 然后在替换回调中,匹配其他项并放入一个数组中,然后返回整行进行替换。或者,无需替换,只需在循环中匹配行 ^@,,,(.*),然后在捕获组 1 上使用另一个正则表达式。

标签: python regex regex-lookarounds


【解决方案1】:

用途:

(^@property|(?!^)\G)(.*? )\K([^-\n]\w+)


细分:

 

(^@property|(?!^)\G)

  • ^@property
    匹配以@property 开头的行

   或者

  • (?!^)\G
    从上一个成功匹配开始搜索

 

(.*? )

匹配任何文本直到下一个捕获组(前面有一个空格

 

\K([^-\n]\w+)

  • \K
    从当前结果中丢弃所有先前的匹配项

  • ([^-\n]\w+)
    查找前面没有破折号或换行符的单词

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 2013-11-23
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多