RegEx 忽略注释行。

Eph*_*eal 2 python regex python-3.x

我正在尝试解析以下文本

# ---------------------------------------------------------------------------- #
# Packages
# ---------------------------------------------------------------------------- #

set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "file_1_test_1_qip.vhd"]
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "file_2_test_1_qip.vhd"]
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "file_3_test_1_qip.vhd"]

# Register Tool set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "file_INVALID_test_1_qip.vhd"]

# ---------------------------------------------------------------------------- #
# Sub Modules
# ---------------------------------------------------------------------------- #

set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) "module_test_2.qip"]
set_global_assignment -name QIP_FILE [file join $::quartus(qip_path) "module_test_3.qip"]

# ---------------------------------------------------------------------------- #
# Module Files
# ---------------------------------------------------------------------------- #

set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "file_4_test_1_qip.vhd"]
set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "file_5_test_1_qip.vhd"]
Run Code Online (Sandbox Code Playgroud)

使用正则表达式:

(?<=_FILE).*"(.+)"
Run Code Online (Sandbox Code Playgroud)

这也可以正常工作,并为我提供上面文本中的所有文件名,但它也为我提供已注释掉的行的文件名。

我试图制作一个 RegEx 来忽略这一点,但我无法让它工作。

这是我尝试过的

(?<!#)(?:(?<=_FILE).+"(.+)")
Run Code Online (Sandbox Code Playgroud)

请查看RegEx 101

问候埃弗雷尔

Ara*_*Fey 5

要忽略注释行,您必须从行的开头开始匹配并匹配除以下内容之外的任何内容#

^[^#\n]*(?:(?<=_FILE).+"(.+)")
Run Code Online (Sandbox Code Playgroud)

要不就

^[^#\n]*_FILE.+"(.+)"
Run Code Online (Sandbox Code Playgroud)

两种模式都需要多行标志m