注释正则表达式中的不匹配

时间:2012-07-18 05:43:32

标签: regex

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

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

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

^[^:]+(?=:)

所以结果将是

Line1Name:
Line2Name:
Line4Name:

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

Line1Name: 
Line2Name:
X
Line4Name:

这是否可以使用正则表达式?

1 个答案:

答案 0 :(得分:1)

如果您看一下正则表达式是什么,您将意识到单独使用正则表达式无法进行逻辑运算。引用Wikipedia

  

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

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

要实现您的目标,您需要某种逻辑开关来操作正则表达式搜索的匹配/不匹配结果并触发操作。您没有指定在使用正则表达式的环境中,因此提供解决方案有点无意义,但作为示例,这将完成您在纯bash中尝试执行的操作:

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

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

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

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