![正则表达式捕获键的空白值](https://linux22.com/image/14418/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%8D%95%E8%8E%B7%E9%94%AE%E7%9A%84%E7%A9%BA%E7%99%BD%E5%80%BC.png)
我试图从下面的输入字符串中捕获“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
匹配字符串中嵌入的换行符(整个文档的字符串)。因此,该表达式捕获从第一个非空格(包括换行符)、非*
、非:
(两者:
都是*
中的文字[...]
)、字符(即下一行的p
in )直到下一个换行符的所有内容。probe