我是regex的新手,我似乎还没有找到使用这些模式的出路。我正在尝试将句子中的标点(引号和问号)匹配失败。
这是我的代码:
string sentence = "\"This is the end?\"";
string punctuation = Regex.Match(sentence, "[\"?]").Value;
我在这里做错了什么?我希望控制台显示"?"
,但是它会显示双引号。
答案 0 :(得分:3)
如果您要在问题陈述中匹配所有引号和问号,那么您的模式就可以了。问题是Regex.Match
仅返回找到的 first 匹配项。来自MSDN:
在输入字符串中搜索指定正则表达式的首次出现 ...
您可能想使用Matches
:
string sentence = "\"This is the end?\"";
MatchCollection allPunctuation = Regex.Matches(sentence, "[\"?]");
foreach(Match punctuation in allPunctuation)
{
Console.WriteLine("Found {0} at position {1}", punctuation.Value, punctuation.Index);
}
这将返回:
Found " at position 0
Found ? at position 16
Found " at position 17
我还要指出,如果您真的想匹配所有所有标点符号,包括“法国”引号(«
和»
),“聪明”引号(“
和”
,反问号(¿
)以及许多其他符号,您可以将Unicode Character categories与\p{P}
之类的模式一起使用。 / p>
答案 1 :(得分:2)
您需要致电Matchs而不是Match。
示例:
string sentence = "\"This is the end?\"";
var matches = Regex.Matches(sentence, "[\"?]");
var punctuationLocations = string.Empty;
foreach(Match match in matches)
{
punctuationLocations += match.Value + " at index:" + match.Index + Environment.NewLine;
}
// punctuationLocations:
// " at index:0
// ? at index:16
// " at index:17