1

我需要用 X 字符“注释”正则表达式中的每个不匹配项,例如,如果我有一个文本文件,例如:

Line1Name: this is a (string).
Line2Name: (a string)
Line3Name this is a line without parenthesis
Line4Name: (a string 2)

现在下面的正则表达式将匹配 a 之前的所有内容:

^[^:]+(?=:)

所以结果将是

Line1Name:
Line2Name:
Line4Name:

但是,我需要在第 3 行注释不匹配,并具有以下输出:

Line1Name: 
Line2Name:
X
Line4Name:

这可以用正则表达式吗?

4

1 回答 1

1

如果您了解什么是正则表达式,您会意识到仅使用正则表达式是不可能进行逻辑运算的。引用维基百科

在计算中,正则表达式提供了一种简洁灵活的方法来“匹配”(指定和识别)文本字符串,例如特定字符、单词或字符模式。

强调我的——简单地说,正则表达式是一种寻找字符串的好方法;它要么匹配(匹配),要么不匹配。

为了实现您所追求的,您需要某种逻辑开关,该开关对您的正则表达式搜索的匹配/不匹配结果进行操作并触发一个操作。您尚未指定在什么环境中使用正则表达式,因此提供解决方案有点毫无意义,但作为示例,这将做您在 pure 中尝试做的事情bash

# assuming your string is in $str
result="$([[ $str =~ ^[^:]+: ]] && echo "${str%:*}" || echo "X")"

这在支持您的正则表达式模式(Ruby)的语言中做同样的事情:

# assuming your string is in str
result = str.match(/^[^:]+(?=:)/) || "X"

作为旁注,您的示例代码与输出不匹配:您正在使用冒号的前瞻,它在匹配中排除它,但您的输出包含它。在我的示例中,我选择坚持使用您的正则表达式而不是输出模式,从而从结果中排除冒号。

于 2012-07-21T14:08:08.873 回答