正则表达式中每个/之间的所有字符。 /可能是零到多

时间:2011-10-17 19:15:47

标签: c# regex

我对这个正则表达式有点麻烦。我有一行看起来像这样

PREF-FA/WV/WB/LO...could continue
or
PREF-FA

我需要获取每一行的所有评级(FA / WV / WB等),并将它们放在自己的班级中。这是正则表达式可以处理的吗?或者我应该将字符串分开?

我有一个名为rating的类,以及一个List,其长度决定了上一行中的评分数。

由于

3 个答案:

答案 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})$