如何将任何东西匹配到一个组中的字符序列
本文关键字:一个 字符 任何东 | 更新日期: 2023-09-27 18:11:54
我有这个字符串序列
game (
name "!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.]"
description "!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.]"
rom ( name "!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.].nes" size 40976 crc 2e2bf112 md5 b1a0e41cfd30c1d61de3b7900232de59 sha1 7849ccb4cba5714042694da0e076092565023fc9 )
)
game (
name "'89 Dennou Kyuusei Uranai (1988-12-10)(Induction Produce)(JP)"
description "'89 Dennou Kyuusei Uranai (1988-12-10)(Induction Produce)(JP)"
rom ( name "'89 Dennou Kyuusei Uranai (1988-12-10)(Induction Produce)(JP).nes" size 262160 crc 679db8f7 md5 31c66f47bd73568b4a675c9f8d995684 sha1 3918c52a5491695ed6b10b65f59622687dd7dc66 )
)
我想匹配rom ( name"
和" size
之间的字符,如果它匹配给定的crc值。我现在有这个regex
(?<=name ")(.+)(?= crc 2e2bf112)
符合!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.].nes" size 40976
我需要一个只匹配!Mario (2000-11-19)(Dokokalaki)(JP)[h][Super Mario Bros.].nes
的正则表达式。
我试过像这样添加另一个环顾(?<=name ")(.+)(?=" size)(?= crc 2e2bf112)
但这和任何东西都不相符。除了crc
之外,我不知道size
之后的东西的长度或值,所以我无法与[0-9]
s匹配
我正在使用RegExr来构建我的正则表达式,正则表达式本身将在。net/c#代码中使用。
使用这个正则表达式:
(?<=rom '( name "").*?(?="" size 'd+ crc 2e2bf112)
在c# :
string theMatch = Regex.Match(yourString, @"(?<=rom '( name "").*?(?="" size 'd+ crc 2e2bf112)").Value;
- 后面的
(?<=rom '( name "")
用作左边 的分隔符 -
.*?
延迟匹配字符到… - forward
(?="" size 'd+ crc 2e2bf112)
可以找到右 分隔符的点
- 零长度断言的前向和后向
- 掌握向前看和向后看
不要到处打听了,这会使工作更复杂,而且不会带来任何好处。让regex消耗尽可能多的字符串,并使用捕获组来提取您真正感兴趣的部分。
Regex r = new Regex(@"rom '( name ""(?<name>[^""]+)"" size 'd+ crc 2e2bf112'b");
Match m = r.Match(subjectString);
if (m.Success) {
resultString = m.Groups["name"].Value;
}