正则表达式捕获键的空白值

正则表达式捕获键的空白值

我试图从下面的输入字符串中捕获“Comment”的值,regex = ^comment[\s*:]*(.*) 但我得到以下输出: “comment”:“探测周期错误:0”

No of Host Probes       : 0
Max no of Host Probes   : 0
rstIsFailure            : 1
state                   : UNKNOW
comment                 :  
probe cycle errors      : 0
Perf Callback Ids       : None
Group Member            : __jjjjkj - U0

预期输出:comment :

答案1

使用sed, 并假设您不希望在 后出现第一个空白字符:

sed '/^comment/!d; s/[^:]*:[[:blank:]]//' file

或者,仅使用一条编辑语句,

sed -n 's/^comment[[:blank:]]*:[[:blank:]]\(.*\)/\1/p' file

在Python中,我想这看起来像

^comment[[:blank:]]*:[[:blank:]](.*)

或者可能

^comment\s*:\s(.*)

如果 Python 不理解 POSIX 字符类。

[[:blank:]]*位与任意一系列空格或制表符匹配。该\s模式更像 POSIX[[:space:]]字符类,它匹配更广泛的类似空格的字符,包括换行符。


您的表达式的问题是您正在匹配字符串中的整个文档,而在Python(我假设您正在使用)中,\s匹配字符串中嵌入的换行符(整个文档的字符串)。因此,该表达式捕获从第一个非空格(包括换行符)、非*、非:(两者:都是*中的文字[...])、字符(即下一行的pin )直到下一个换行符的所有内容。probe

答案2

您还可以将其设置为以下内容:

'^comment[\s*:]*(\S+| +)$'

更改.*\S+,以便我们匹配任何非空白或空格(下面进一步解释)后跟行尾或空格后跟行尾。

它还| +)可以匹配集合中任意数量的空格(一个或多个)。

然后,该集合预计会在行尾跟随以捕捉您正在经历的这种场景

这是说明匹配条件的正则表达式的屏幕截图:

在此输入图像描述

相关内容