C#正则表达式表示特定字符或无

C#正则表达式表示特定字符或无,c#,regex,C#,Regex,短版: 如何在一个较长的、可能重复的模式中匹配单个特定字符或什么都不匹配 长版本: 我正在形成一个正则表达式,以计算字符串“word”在具有特定格式的字符串中的出现次数; 一个连字符,后跟一个整数(任意长度),后跟一个连字符,后跟字符串“word”,后跟一个连字符,可能会重复。 例如 “-0-word-”(1个匹配项) “-10个单词-”(1个匹配) “-999单词-”(1个匹配项) “-1-word-1-word-”(2个匹配项) “-1-word-1-word-222-word-”(3个匹配

短版: 如何在一个较长的、可能重复的模式中匹配单个特定字符或什么都不匹配

长版本: 我正在形成一个正则表达式,以计算字符串“word”在具有特定格式的字符串中的出现次数; 一个连字符,后跟一个整数(任意长度),后跟一个连字符,后跟字符串“word”,后跟一个连字符,可能会重复。 例如

“-0-word-”(1个匹配项)
“-10个单词-”(1个匹配)
“-999单词-”(1个匹配项)
“-1-word-1-word-”(2个匹配项)
“-1-word-1-word-222-word-”(3个匹配项)等

如果模式重复,那么我认为前导连字符必须是可选的,因为它已经是前一个匹配的尾随连字符

到目前为止,我想到的最好的方法是

[-]?\d+-word-
这给了三个匹配的

“-1-word-1-word-222-word-”

但它也给出了3个匹配项

“-1-word-1-word-X222-word-”

因为前导连字符是可选的,而“X”被忽略。我希望前导连字符只能是连字符,或者什么都不能。如果格式不正确,我想确保整个字符串被拒绝(没有匹配项)

谢谢你的帮助

^-\d+-word(?:-\d+-word)*-$
试试这个。看演示


请尝试此正则表达式演示,以获取单词Occurrences

模式为“-\d+-word(-\d+-word)*-”


如果要计算发生次数并同时检查字符串格式,可以执行以下操作:

String input = "-1-word-1-word-222-word-";
String pattern = @"\A(-[0-9]+-word)+-\z";

Match m = Regex.Match(input, pattern);

if (m.Success) {
    Console.WriteLine(m.Groups[1].Captures.Count);
}

当您重复一个捕获组时,会存储每个捕获,您可以使用
captures
属性访问它们。

上面的内容是准确的输入吗?不是匹配或字符串的一部分。只是写字符串时的习惯!谢谢。regexr将来会做什么?在这种情况下,你的回答是无用的。对你的正则表达式也做一些解释,而不仅仅是链接演示。将desc添加到正则表达式中。谢谢。这将验证字符串ok,但只提供一个匹配项。我想我可以先使用它,然后使用[-]?\d+-word-来获得计数。谢谢,我将使用这种方法。