C#Regex——在两个相同的单词及其子行之间进行多次匹配
本文关键字:之间 两个 C#Regex 单词 | 更新日期: 2023-09-27 18:30:00
我有这样的文本:
INIT -- FOO
UP: 1
UpLine #1
DOWN: 2
DownLine #1
DownLine #2
INIT -- BAR
UP: 0
DOWN: 2
DownLine #1
DownLine #2
我想基本上捕捉信息,比如INIT-BAR,我有1个向上,2个向下,以及它们的内容。。。然后INIT-FOO也是如此。。。
我就是不知道该怎么做。。。INIT是一个常数,FOO和BAR是变化的变量。
这里有一个正则表达式,它使用命名的捕获组来跟踪所有不同的片段:
INIT's*--'s*(?<label>'w+)'n
's+UP:'s*(?<up>'d+)'n
(?<uplines>(?:'s+(?!'s*DOWN).*'n)*)
's+DOWN:'s*(?<down>'d+)'n
(?<downlines>(?:'s+(?!'s*INIT).*'n)*)
我知道它有点乱,但它有效!
INIT's*--'s*(?<label>'w+)'n
匹配INIT行并捕获"标签"组
's+UP:'s*(?<up>'d+)'n
与组中的上行线和"上行"号码相匹配
(?<uplines>(?:'s+(?!'s*DOWN).*'n)*)
在下行线路之前获得任何"上行链路"
's+DOWN:'s*(?<down>'d+)'n
与下行线和组中的"下行"编号相匹配
(?<downlines>(?:'s+(?!'s*INIT).*'n)*)
在下一个INIT 之前获得任何"下线"
在regex101上试用。
备注:
- 我在regex101上使用了"extended"标志,使其更易于阅读。C#支持"IgnorePatternWhilespace"选项,但要在C#中使用它,请将所有行包装在一起
- 您的环境可能有不同的换行符。很可能是
'r'n
而不是n