【发布时间】:2021-08-23 12:15:15
【问题描述】:
我需要承认,如果涉及到 RegEx 表达式,我是非常基础的。 我有一个用 C# 编写的应用程序,它在文本文件中查找某些 Regex 表达式。我不确定如何解释我的问题,所以我将直接举例。
我的文字:
DeviceNr : 30
DeviceClass = ABC
UnitNr = 1
Reference = 29
PhysState = ENABLED
LogState = OPERATIVE
DevicePlan = 702
Manufacturer = CDE
Model = EFG
ready
DeviceNr : 31
DeviceClass = ABC
UnitNr = 9
Reference = 33
PhysState = ENABLED
LogState = OPERATIVE
Manufacturer = DDD
Model = XYZ
Description = something here
ready
我需要匹配以“DeviceNr”单词开头、以“ready”结尾并具有“DeviceClass = ABC”和“Model = XYZ”的多行文本 - 我只能假设这些行将按照这个确切的顺序,但我不能假设它们之间会发生什么,甚至不能假设它们之间的其他行数。我尝试使用下面的正则表达式,但它匹配整个文本而不是仅 DeviceNr :31
DeviceNr : ([0-9]+)(?:.*?\n)*? DeviceClass = ABC(?:.*?\n)*? Model = XYZ(?:.*?\n)*?ready\n\n
【问题讨论】:
-
这是您要找的吗?
(?=(DeviceNr.*?ready))演示:regex101.com/r/nZj7wS/2 -
也许是个愚蠢的问题,但是我需要在“DeviceNr”和“ready”之间匹配“DeviceClass = ABC”和“Model = XYZ”行的部分呢?
-
检查这个:
(?=DeviceNr.*?(DeviceClass\s=\s\w+).*?(Model\s=\s\w+).*ready)演示:regex101.com/r/nZj7wS/3 -
它仍然没有给我我需要的东西。 regex101.com/r/MBXSht/1 我只需要一个匹配项(第二个匹配项),我需要知道我匹配了两行,并且它们被放置在“DeviceNr”中并且第一个找到“准备好”的词。