
以下の入力文字列から「コメント」値をキャプチャしようとしていますが、次の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
または、1つの編集ステートメントのみを使用して
sed -n 's/^comment[[:blank:]]*:[[:blank:]]\(.*\)/\1/p' file
Pythonでは、次のように見たいです。
^comment[[:blank:]]*:[[:blank:]](.*)
または多分
^comment\s*:\s(.*)
PythonがPOSIX文字クラスを理解していない場合
この[[:blank:]]*
ビットはスペースまたはタブの順序と一致します。このパターンは、改行文字を含むより広い範囲の空白文字と一致するという点で、\s
POSIX文字クラスに似ています。[[:space:]]
式の問題は、文字列内で文書全体を一致させるのに対し、Python(あなたが使用していると仮定)では、文字列\s
(文書全体の文字列)に含まれる改行を一致させることです。したがって、この式は、最初の非空白(改行を含む)、non *
、non :
(両方のリテラルです:
)、文字(つまり、次の行のin)から次の改行まですべてをキャプチャします。*
[...]
p
probe