c# 正则匹配,匹配括号,中括号等

最近需要识别出一段文字里的引用,即 [数字] 的格式,学习了一下关于括号,中括号的识别内容,这里识别的是中括号,小括号什么的都是同理

零宽断言

零宽断言正如它的名字一样,是一种零宽度的匹配,它匹配到的内容不会保存到匹配结果中去,最终匹配结果只是一个位置而已。作用是对指定位置增加限制

表达式 作用
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?=exp) 匹配前面不是exp的位置

识别括号所有内容

因此,为了识别出中括号内的内容,

pattern=@"(?<=\[)([\s\S]*)(?=\])"
例如,对于afa[Aa7]sdjf,可以识别出Aa7

识别括号内的数字

pattern=@"(?<=\[)([1-9][0-9]*?)(?=\])"

按特定格式识别括号

由于我要识别的内容包括[2],[2,3,4]这些格式的,因此这里的正则表达式

pattern=@"(?<=\[)((\d+,)*(\d+,)*\d+)(?=\])"
这里还考虑了逗号半角的和全角的情况。

最后

附上一段较为完整的识别代码

string pattern = @"(?<=\[)((\d+,)*(\d+,)*\d+)(?=\])";

MatchCollection matchCollection = Regex.Matches(fullText, pattern);
if (matchCollection.Count > 0)
{
     foreach (var match in matchCollection)
     {
         string strNum = match.ToString();
      }
 }

使用MatchCollection 获取所有满足条件的识别内容
使用Match 获取第一个符合条件的识别内容。

你可能感兴趣的:(c#)