我有这个字符串序列
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 )
)
如果匹配给定的crc值,我想匹配rom ( name"
和" size
之间的字符。我目前有这个正则表达式
(?<=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)
但这根本不匹配。除了size
之外,我不知道crc
之后的内容的长度或值,所以我无法将其与[0-9]
s匹配
我正在使用RegExr构建我的正则表达式,正则表达式本身将用于.NET / C#代码。
答案 0 :(得分:3)
使用此正则表达式:
(?<=rom \( name "").*?(?="" size \d+ crc 2e2bf112)
在C#中:
string theMatch = Regex.Match(yourString, @"(?<=rom \( name "").*?(?="" size \d+ crc 2e2bf112)").Value;
<强>解释强>
(?<=rom \( name "")
用作左侧的分隔符.*?
懒惰地将字符匹配到...... (?="" size \d+ crc 2e2bf112)
可以在右侧找到分隔符的点<强>参考强>
答案 1 :(得分:0)
不要打扰外表,他们会使工作变得更加复杂,并且不会产生抵消效益。让正则表达式消耗尽可能多的字符串,并使用捕获组来提取您真正感兴趣的部分。
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;
}