c#中的正则表达式问题只返回单个匹配

时间:2016-10-13 17:12:51

标签: c# regex

我正在构建一个正则表达式,但由于它无法正常工作,我错过了一些东西。 我的正则表达式逻辑试图寻找任何具有# anychars #的东西,并返回句子上的匹配数而不是单个匹配。 以下是一些例子

1- - (void)setButtonColor:(UIColor*) color { NSLog(@"color"); } 应返回两个匹配项:#_Title_# and #_Content_#

2- #_Title_# and #_Content_#应返回3个匹配:Product #_TemplateName_# #_Full_Product_Name_# more text. text text #_Short_Description_# #_TemplateName_##_Full_Product_Name_#

等等。这是我的正则表达式的样子:#_Short_Description_#

对我做错了什么的想法?

4 个答案:

答案 0 :(得分:2)

简单的事情:

.row-no-padding {
    margin-left: 0;
    margin-right: 0;
}
.row-no-padding .col-sm-4 {
    padding-left: 0;
    padding-right: 0;
}

或者:

body > .container {
    padding-left: 0;
    padding-right: 0;
    width: 100%;
}

如果您也尝试匹配下划线(问题的原始版本中不清楚)。或者:

#.*?#

这样可以更轻松地在#_.*?_# #_(.*?)_# 分隔符之间提取令牌。

应该有效。 #_是关键。它是非贪婪的。否则,您匹配第一个和最后一个_#

之间的所有内容

例如:

*?

输出:

#

答案 1 :(得分:1)

试试这个:

            string[] inputs = {
                                  "#Title# and #Content#",
                                  "Product #TemplateName# #_Full_Product_Name_# more text. text text #_Short_Description_#"
                              };

            string pattern = "(?'string'#[^#]+#)";

            foreach (string input in inputs)
            {
                MatchCollection matches = Regex.Matches(input, pattern);
                Console.WriteLine(string.Join(",",matches.Cast<Match>().Select(x => x.Groups["string"].Value).ToArray()));
            }
            Console.ReadLine();

答案 2 :(得分:1)

你的正则表达式不正确。此外,如果您想要所有匹配,您希望循环匹配。

static void Main(string[] args)
{
    string input = "Product #_TemplateName_# #_Full_Product_Name_# more text. text text #_Short_Description_#",
        pattern = "#_[a-zA-Z_]*_#";
    Match match = Regex.Match(input, pattern);
    while (match.Success)
    {
        Console.WriteLine(match.Value);
        match = match.NextMatch();
    }
    Console.ReadLine();
}

结果

enter image description here

答案 3 :(得分:0)

请勿使用锚点并将正则表达式更改为:

<xsl:choose> <xsl:when test="document/richtext/pardef[@list] ='bullet'"> <ul> <xsl:for-each select="document/richtext/par/run"> <li> <xsl:for-each select="run"> <xsl:value-of select="."/> </xsl:for-each> </li> </xsl:for-each> </ul> </xsl:when> <xsl:otherwise> <p> <xsl:for-each select="document/richtext/par"> <p> <xsl:for-each select="run"> <xsl:value-of select="."/> </xsl:for-each> </p> </xsl:for-each> </p> </xsl:otherwise> </xsl:choose>

在正则表达式中,(#[^#]+#)表达式意味着任何字符但

[^#]