此文档用于记录平时使用正则表达式的心得,不定期更新
基础
实例
替换实例一
//这里匹配以 “( 开头,以 )” 结尾的字符串
private static Regex REGEX_ARG_CONTENT = new Regex(@"""@(.*?)""");//此方法用于在匹配到的结果前添加@字符
format = REGEX_ARG_CONTENT.Replace(format, new MatchEvaluator((m) =>
{string value = $"@{m}";return value;
}));
替换实例二
//分组构造,匹配以Properties.Resources.开始以,或)结束的字符串
(Properties.Resources.)(.*?)([,)])
将匹配到的数据分组1替换为LanguageManager.GetString("
则匹配和替换字符串为:
//匹配字符串,这里使用()将匹配分成3个组
(Properties.Resources.)(.*?)([,)])
//将匹配结果替换如下,使用匹配结果中的分组2和3来组合最后的替换结果
LanguageManager.GetString("${2}")${3}
前一个字符不是某个字符
(?<!x)
可以使用负向零宽断言来实现,在正则表达式中,(?<!x)
表示匹配前一个字符不是x的情况,例如:要查找字符串中不是数字的字符,可以使用 (?<![0-9])\w
,其中 (?<![0-9])
表示前一个字符不是数字,\w
表示匹配任意一个字母、数字或下划线。
后一个字符不是某个字符
?![Xx]
可以使用否定后行断言来实现该功能。上面是一个示例,找到所有的字母,但字符串后面的字符不是X
[A-Za-z](?![Xx])
这个正则表达式使用 [A-Za-z]
匹配任何字母,然后使用 (?![Xx])
表示后面的字符不是X或x。
请注意,否定后行断言只匹配前面的字符,不匹配在其后面的字符。因此,在使用这些表达式时,请确保在处理整个字符串之前消耗任何之后的匹配。
官方文档:.NET 正则表达式 - .NET | Microsoft Learn