在多行匹配字符串后匹配字符串

时间:2017-06-03 15:42:34

标签: regex

我尝试编写一个正则表达式,用别名“USBBoard”搜索端口名称 使用这个:

  

端口名称=(COM \ d +)。* Alias = BoardUSB

但似乎小组赛'COM10'代替'COM1' 有什么改进正则表达式的建议吗?感谢

[Serial_COM10]
Port name=COM10
Baud rate=9600
Data bits=8
Timeout=2500
Alias=COM_PPS
Handshake=None
[Serial_COM1]
Port name=COM1
Baud rate=9600
Data bits=8
Timeout=2500
Alias=BoardUSB
Handshake=None
[Serial_COM3]
Port name=COM3
Baud rate=115200
Data bits=8
Timeout=2500
Alias=usb_hub
Handshake=None

2 个答案:

答案 0 :(得分:0)

您可以使用此模式:

(?m)^Port name=(COM\d+)\r?\n(?:[^[].*\n)*Alias=BoardUSB

[^[]确保“端口名称”和“别名”之间的行不以[开头。

demo

答案 1 :(得分:0)

您可以使用此正则表达式:

Port\sname=(COM\d+)((?!Port)[\w\W])*Alias=BoardUSB

特别是,((?!Port)[\w\W])*排除了“Port”和“Alias”之间包含“Port”字样的所有字符串,因此您不会读取与其他端口关联的Alias。