正则表达式:在C#中匹配引号[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式:在C#中匹配引号[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我是正则表达式的新手,我似乎并没有找到这些模式的出路。我试图在句子(引号和问号)中匹配标点符号,但没有成功。

这是我的代码:

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

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

答案

如果您想在问题中列出所有引号和问号,那么您的模式就可以了。问题是Regex.Match只返回它找到的第一场比赛。来自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}

另一答案

您需要调用匹配而不是匹配。

例:

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

以上是关于正则表达式:在C#中匹配引号[重复]的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式:匹配单个数字重复n次

C# 正则表达式拆分引号和逗号语法错误 [重复]

Python正则表达式怎么区配引号之间的内容

使用正则表达式将带引号的字符串与嵌入的非转义引号匹配

Perl 正则表达式匹配大型 Unicode 代码点

正则表达式:如果某个字符在引号内,则不匹配它