我正在尝试从这些字符串中获取部分:
第一:
2F4449534301224E4F204445534352495054494F4E20415641494C41424C45011F30303034342D30313230382D
第二:
2F4449534301224E4F204445534352495054494F4E20415641494C41424C45011F30303130312D3032323534012630303130312D31303932342D
基本上我想为两个字符串返回:
第一:
2F(+)011F(+)2D
第二:
2F(+)011F(+)0126(+)2D
我正在尝试使用这种模式:
Match m = Regex.Match(this.__line,
@"^2F.*22(.*)011F(.*)(0126.*)?.{2}$",
RegexOptions.IgnoreCase);
然而,当我尝试:
if (m.Success)
{
if (m.Groups[3].Value != "")
{
Console.WriteLine("good");
}
}
else
{
Console.WriteLine("bad");
}
我从第二个字符串中得到“坏”,因为它与模式不匹配。我没有使用正确的模式吗?
答案 0 :(得分:1)
问题在于你的模式是贪婪的。你应该使用这个模式:
^2F.*22(.*?)011F(.*?)(0126.*?)?.{2}$
你的正则表达式中的第二组匹配所有内容,直到最后的两个charcaters,因为它是贪婪的,最后一组是可选的。
要使你的比赛不合理使用吗?在量词之后。
Here是关于贪婪和不同意的更多信息。
希望这有帮助。
答案 1 :(得分:0)
答案 2 :(得分:0)
我想给你一些建议。 这些不是您问题的答案,只是一些好的做法提示:
(?i:pattern)
。这使您可以选择 RegexOptions.Compiled ,这将为您提供更好的性能(?<name>pattern)
。这样您就可以通过regexMatch.Groups["name"].Captures[0].Value
(?:pattern)
问候。