使用python的正则表达式需要选择最近的部分

时间:2017-01-11 08:47:14

标签: python regex

需要一些关于RegEx over python的帮助。 我有这样的文字:

part101_add(
    name = "part101-1",
    dev2_serial = "dev_l622_01",
    serial_port = "/dev/tty-part101-1",
    yok_serial = "YT8388"
)
yok_tar_add("YT8388", None)
part2_add(
    name = "part2-1",
    serial_number = "SERIALNUMBER",
    serial_port = "/dev/tty-part2-1",
    yok_serial = "YT03044",
    yok_port_board = "N"
)
yok_tar_add("YT03044", None)

我需要选择所有部分* _add及其内容。 例如:

part101_add:

name = "part101-1",
dev2_serial = "dev_l622_01",
serial_port = "/dev/tty-part101-1",
yok_serial = "YT8388"

part2_add:
serial_number = "SERIALNUMBER",
serial_port = "/dev/tty-part2-1",
yok_serial = "YT03044",
yok_port_board = "N"

问题是我无法分离结果。 使用这种模式时:

regex = r"(.*?_add)\([\s\S.]*\)"

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我会将模式精确到仅在行的开头和结尾匹配,并使用带[\s\S]的惰性量词:

r"(?m)^(part\d+_add)\([\s\S]*?\)$"

请参阅this regex demo

<强>详情:

  • (?m) - 内联re.MULTILINE修饰符版本,使^与第一行匹配,$与第一行匹配
  • ^ - 开始行
  • (part\d+_add) - 第1组捕获part,1位数,_add
  • \( - 文字(
  • [\s\S]*? - 任意0个字符,尽可能少
  • \)$ - 该行末尾的)