如何排除正向回顾后出现的事件? [英] How to exclude occurrences after a positive lookbehind?

查看:15
本文介绍了如何排除正向回顾后出现的事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有以下markdown列表项:

- [x] Example of a completed task.
- [x] ! Example of a completed task.
- [x] ? Example of a completed task.

我有兴趣使用regex解析该项目并提取以下组捕获:

  • $1:当符号x介于
  • 之间时,左方括号[和右方括号]
  • $2:括号[]之间的符号x
  • $3!后面的修饰语[x]
  • $4?后面的修饰语[x]
  • $5[x]后面的文本,不带修饰语,例如[x] This is targeted.
  • $6[x] !后面的文本
  • $7[x] ?后面的文本

在使用在线解析器进行了大量反复试验后,我得出了以下结论:

((?<=x)]|[(?=x]))|((?<=[)x(?=]))|((?<=[x]s)!(?=s))|((?<=[x]s)?(?=s))|((?<=[x]s)[^!?].*)|((?<=[x]s!s).*)|((?<=[x]s?s).*)

为使上述regex更具可读性,以下是逐个列出的捕获组:

  • $1((?<=x)]|[(?=x]))
  • $2((?<=[)x(?=]))
  • $3((?<=[x]s)!(?=s))
  • $4((?<=[x]s)?(?=s))
  • $5((?<=[x]s)[^!?].*)
  • $6((?<=[x]s!s).*)
  • $7((?<=[x]s?s).*)

这很可能不是最好的方法,但至少它似乎抓住了我想要的:

我想扩展regex以捕获表中行,该表 如下所示:

|       | Task name                               |    Plan     |   Actual    |      File      |
| :---- | :-------------------------------------- | :---------: | :---------: | :------------: |
| [x]   | Task one with a reasonably long name.   | 08:00-08:45 | 08:00-09:00 |  [[task-one]]  |
| [x] ! | Task two with a reasonably long name.   | 09:00-09:30 |             |  [[task-two]]  |
| [x] ? | Task three with a reasonably long name. | 11:00-13:00 |             | [[task-three]] |
更具体地说,我希望拥有与上面相同的组捕获,但我希望排除表格网格(即|)。因此,$1$4组应该保持不变,但$5$7组应该捕获文本,不包括|,例如,如下所示:

您对如何调整$5组的正则表达式以排除|有什么想法吗?我无休止地尝试了各种否定(例如,[^|])。我正在使用Oniguruma regular expressions

推荐答案

您可以使用

((?<=x)]|[(?=x]))|((?<=[)x(?=]))|((?<=[x]s)!(?=s))|(?<=[x]s)(?)(?=s)|(?:G(?!A)||(?<=[x]s[?!s]s|))K([^|
]*)(?=|)

请参阅regex101 PCRE和aRuby (Onigmo/Oniguruma) demos

添加了什么?(?:G(?!A)||(?<=[x]s[?!s]s|))K([^| ]*)(?=|)部分:

  • (?:-非捕获组的开始(此处为自定义边界,我们将匹配...)
    • G(?!A)|-前一场比赛的结束和|字符(即|必须紧跟在前一场比赛之后),
    • |(?<=[x]s[?!s]s|)-或前面紧跟[x]+空格+a?!或空格+空格和|字符的位置
  • )-群组结束
  • K-从整个匹配内存缓冲区中删除到目前为止匹配的文本的匹配重置操作符
  • ([^| ]*)-除|和换行符以外的零个或多个字符
  • (?=|)-a|字符必须紧靠当前位置的右侧。

这篇关于如何排除正向回顾后出现的事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆