我需要使用正则表达式中每个不匹配的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:
这是否可以使用正则表达式?
答案 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"
作为旁注,您的示例代码与输出不匹配:您正在使用冒号的前瞻,它在匹配中将其排除,但您的输出包含它。在我的示例中,我选择在你的输出模式上坚持你的正则表达式,从而排除结果中的冒号。