正则表达式:在C#中匹配引号

时间:2019-03-03 17:12:09

标签: c# regex

我是regex的新手,我似乎还没有找到使用这些模式的出路。我正在尝试将句子中的标点(引号和问号)匹配失败。

这是我的代码:

string sentence = "\"This is the end?\"";
string punctuation = Regex.Match(sentence, "[\"?]").Value;

我在这里做错了什么?我希望控制台显示"?",但是它会显示双引号。

2 个答案:

答案 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