我非常討厭正則運算式,幾天來一直把頭撞在墻上。我正在嘗試使用 Python 從 .nk nuke 腳本中提取資訊。格式如下:
> BackdropNode {
inputs 0
name BackdropNode6
tile_color 0x555555ff
label RDN
note_font_size 42
xpos -1136
ypos -4272
bdwidth 451
bdheight 529
}
Write {
file "\[value project_directory]/_output_/\[string range \[file tail \[value root.name]] 0 20].mov"
colorspace sRGB
raw true
file_type mov\{(.*?)\}
mov64_format "mov (QuickTime / MOV)"
mov64_codec AVdh
mov64_dnxhd_codec_profile "DNxHD 422 8-bit 145Mbit"
mov64_dnxhr_codec_profile "SQ 4:2:2 8-bit"
mov64_pixel_format {{0} "yuv420p\tYCbCr 4:2:0 8-bit"}
mov64_quality High
mov64_advanced 1
mov64_write_timecode true
mov64_gop_size 12
mov64_b_frames 0
mov64_bitrate 20000
mov64_bitrate_tolerance 40000000
mov64_quality_min 2
mov64_quality_max 31
render_order 3
checkHashOnRead false
version 132
in_colorspace scene_linear
out_colorspace scene_linear
name Write2
xpos -1025
ypos 2230
}
有一個單詞字串,空格,打開卷曲,然后是新行大括號。我想匹配第一個字串,然后匹配大括號內的所有內容。
我已經到了:
^([a-zA-Z] \s) (\{[^}]*.*\})$
這讓我到了第一個閉合的大括號。我希望它一直到最后一個大括號。
所以匹配 1 將是 BackdropNode {...} 與 BackdropNode 的組 1 和 {...} 的組 2。然后匹配 2 將是 Write {...},其中第 1 組為 Write,第 2 組為 {...}。
uj5u.com熱心網友回復:
您可以使用
(?sm)^([a-zA-Z] )\s*\{(.*?)}(?=\n[a-zA-Z] \s*{\n|\Z)
請參閱正則運算式演示。
詳情:
(?sm)-re.S/re.DOTALLre.M/re.MULTILINE行內修飾符^- 一行的開始([a-zA-Z] )- 第一組:一個或多個字母\s*- 零個或多個空格\{- 一個{字符(.*?)- 第 2 組:盡可能少的任何零個或多個字符}- 一個}字符(?=\n[a-zA-Z] \s*{\n|\Z)- 需要一個換行符,然后是一個或多個字母、零個或多個空格、{一個換行符或整個字串的結尾的正向前瞻。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/457123.html
