python - 具有特定空白的大括号之前的字符串的正则表达式

标签 python regex nuke

我非常不擅长正则表达式,这几天我一直在用头撞墙。我正在尝试使用 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 {...},其中第 1 组为 BackdropNode,第 2 组为 {...}。那么匹配 2 将是 Write {...},组 1 为 Write,组 2 为 {...}。

最佳答案

你可以使用

(?sm)^([a-zA-Z]+)\s*\{(.*?)}(?=\n[a-zA-Z]+\s*{\n|\Z)

请参阅regex demo .

详细信息:

  • (?sm) - re.S/re.DOTALL + re.M/re.MULTILINE 内联修饰符
  • ^ - 行的开头
  • ([a-zA-Z]+) - 第 1 组:一个或多个字母
  • \s* - 零个或多个空格
  • \{ - 一个 { 字符
  • (.*?) - 第 2 组:任意零个或多个尽可能少的字符
  • } - 一个 } 字符
  • (?=\n[a-zA-Z]+\s*{\n|\Z) - 正向前瞻,需要换行符,然后一个或多个字母,零或多个空格、{ 和换行符或整个字符串的结尾。

关于python - 具有特定空白的大括号之前的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71742440/

相关文章:

python - 如何在解析时使用 gmail api 将邮件标记为已读?

python - 使用 Cython 未获得预期的加速

python - 计算 Pandas 中每个 DataFrame 列中的部分匹配

python - Nuke Python - 如何单独设置 XY_Knob 上的值?

c++ - Nuke undefined symbol : _ZN9Imath_2_16Rand325nextfEv

jquery - 通过 AJAX 返回 ZIP 文件

regex - REGEX 中的 1 到 5 个相同的组

regex - 正则表达式获取最后一项

java - .obj 文件的简单正则表达式存在困难

python - 有没有办法放大到 'setSelected' 列表中的下一个节点?