我非常讨厌regex,这几天我一直把头撞在墙上.我正试图从一个网站上获取信息.用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
}

有一个单词字符串,空格,开放curl ,然后是所有的东西,直到新的一行curl 括号.我想匹配第一根弦,然后是花括号内的所有东西.

我来到这里:

^([a-zA-Z]+\s)+(\{[^}]*.*\})$

这让我想到了第一个紧密的curl 括号.我希望一直到最后一个花括号.

所以匹配1是BackdropNode{…}BackdropNode的组1和{…}的组2.那么匹配2将是写入{…}第一组是Write,第二组是{…}.

推荐答案

你可以用

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

regex demo.

Details:

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

Python相关问答推荐

如何获取Django REST框架中序列化器内部的外卡属性?

Python无法在已导入的目录中看到新模块

如何使用Python中的clinicalTrials.gov API获取完整结果?

从包含数字和单词的文件中读取和获取数据集

将HTML输出转换为表格中的问题

如何根据日期和时间将状态更新为已过期或活动?

Python在tuple上操作不会通过整个单词匹配

难以在Manim中正确定位对象

在Google Colab中设置Llama-2出现问题-加载判断点碎片时Cell-run失败

如何获取TFIDF Transformer中的值?

根据二元组列表在pandas中创建新列

numpy卷积与有效

在Django admin中自动完成相关字段筛选

Pandas GroupBy可以分成两个盒子吗?

在pandas数据框中计算相对体积比指标,并添加指标值作为新列

Geopandas未返回正确的缓冲区(单位:米)

Matplotlib中的字体权重

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

以异步方式填充Pandas 数据帧