繁体   English   中英

正则表达式匹配除模式之外的所有内容

[英]Regex to match everything except a pattern

正则表达式新手在这里苦苦挣扎,我知道你们中的一些正则表达式神很容易!

鉴于以下情况:

title:      Some title
date:       2022-08-15
tags:       <value to extract>
identifier: 1234567
---------------------------

Some text
some more text

我想要一个正则表达式来匹配除tags值之外的所有内容(即“<value to extract>”文本)。

对于上下文,这应该在 emacs 上运行(以防万一)。

编辑:只是根据@phils 的问题澄清一下,我只关心提取标签值。 但是,这是通过要求正则表达式字符串的 package 设置,我无法控制它的使用方式。 似乎期望一个正则表达式从字符串中去除我不需要的东西,而不是匹配我想要的东西,这有点烦人。而且,因为它似乎与\\(.\\)匹配所有内容,我我猜它正在使用全局标志?

如果有任何不清楚的地方,请告诉我。

Emacs 正则表达式不能简单地为 foo 的任意值表达“not foo”。 (PCRE 之类的对零宽度负前瞻/后置断言具有非常规扩展,但在 Emacs 中,这种功能通常是在 lisp 代码1的支持下完成的。)

您仍然可以纯粹使用正则表达式匹配来做到这一点,但这非常麻烦。 匹配任何tags:开头的行的 Emacs 正则表达式是:

^\(?:$\|[^t]\|t[^a]\|ta[^g]\|tag[^s]\|tags[^:]\).*


1在 lisp 代码中,您只需检查每一行以查看它是否tags:如果是,则跳过它(这就是 Emacs 通常在没有您正在寻找的功能的情况下逃脱的原因,但当然不会t在这里帮助你)。

在玩了一会儿并从@phils的回答中汲取灵感之后,我想出了以下几点:

"^\\(?:\\(#\\+\\)?\\(?:filetags:\s+\\|tags:\s+\\|title:.*\\|identifier:.*\\|date:.*\\)\\|.*\\)"

我还添加了一个额外的\\(#\\+\\)? 考虑到通常格式为#+key: value的 org 元键。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM