美好的一天!我正在研究LOLCODE的翻译,我在这方面遇到了麻烦:
SMOOSH "A" AN "B" AN "C" AN "D"
我需要得到字符串文字A,B,C,D,但我只得到第一个和最后两个文字。
这是我的代码:
r = new Regex(@"(\s+)?(?<smoosh>SMOOSH)\s+(\""(?<yarn1>[^\""]+).*)\s+(\""(?<yarn2>[^\""]+).*)(\s+)?((\s+)(AN)?(\""(?<yarn3>[^\""]+).*))+(\s+)?(?<comment>BTW\s*.*\s*)?$");
我需要保存所有的字符串文字,以便以后可以连接它。 提前谢谢。
答案 0 :(得分:1)
试试这个:
Regex re = new Regex(@"""(.*?)""");
MatchCollection mc = re.Matches(sourcestring);
int mIdx=0;
foreach (Match m in mc)
{
for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
{
Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
}
mIdx++;
}
您将获得数组中的所有文字。
答案 1 :(得分:0)
您可以使用捕获组。
@"""([^""]*)"""
从组索引1中获取所需的字符串。
Regex rgx = new Regex(@"""([^""]*)""");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);
OR
使用\G
锚点。\G
断言上一场比赛结束时的位置或第一场比赛的字符串开头。它仅在包含字符串SMOOSH
@"(?:(?:\s+)?(?<smoosh>SMOOSH)\s+|(?<!^)\G) *(?:AN)* *""?([^""\n]*)""?"
代码:
String input = @"SMOOSH ""A"" AN ""B"" AN ""C"" AN ""D""";
Regex rgx = new Regex(@"(?:(?:\s+)?(?<smoosh>SMOOSH)\s+|(?<!^)\G) *(?:AN)* *""?([^""\n]*)""?");
foreach (Match m in rgx.Matches(input))
Console.WriteLine(m.Groups[1].Value);