我对这个正则表达式有点麻烦。我有一行看起来像这样
PREF-FA/WV/WB/LO...could continue
or
PREF-FA
我需要获取每一行的所有评级(FA / WV / WB等),并将它们放在自己的班级中。这是正则表达式可以处理的吗?或者我应该将字符串分开?
我有一个名为rating的类,以及一个List,其长度决定了上一行中的评分数。
由于
答案 0 :(得分:2)
怎么样
Regex
.Matches("PREF-FA/WV/WB/LO" , @".+?-(?<rating>.{2})(?:/(?<rating>.{2}))*")
.Cast<Match>()
.SelectMany(m => m.Groups["rating"].Captures.Cast<Capture>().Select(c => c.Value))
给IEnumerable<string>
的值为“FA”,“WV”,“WB”,“LO”
回到.Net2.0世界:
MatchCollection matches=Regex
.Matches("PREF-FA/WV/WB/LO",@".+?-(?<rating>.{2})(?:/(?<rating>.{2}))*");
List<string> ratings=new List<string>();
foreach(Match m in matches)
{
CaptureCollection captures=m.Groups["rating"].Captures;
foreach(Capture c in captures)
{
ratings.Add(c.Value);
}
}
答案 1 :(得分:0)
您可以使用此正则表达式(?<=PREF-).*$
resultString = Regex.Match(subjectString, "(?<=PREF-).*$",
RegexOptions.Singleline | RegexOptions.Multiline).Value;
它使用正面外观来匹配PREF-
,然后计算后续字符串。
如果你想循环所有的数学
Regex ItemRegex = new Regex(@"(?<=PREF-).*$", RegexOptions.Compiled);
foreach (Match ItemMatch in ItemRegex.Matches(subjectString))
{
Console.WriteLine(ItemMatch);
}
答案 2 :(得分:0)
你可以尝试:
((?:\w{2}/)*\w{2})$
?:
以避免捕获2个字母的单词和斜杠。
如果需要,可以在Rubular上进行测试。正则表达式适用于许多正则表达式引擎。
如果该行始终以PREF-
开头,则可以使用:
^PREF-((?:\w{2}/)*\w{2})$