c# - .NET 正则表达式与否定断言不匹配
问题描述
我有一个文件,DEFAULT_DATABASE = [db_name]
只有在db_name
不是时才 master
需要在其中匹配表单的字符串。我正在使用以下正则表达式:
DEFAULT_DATABASE\s*=\s*\[(?!master)\]
但否定断言不匹配。无论如何都有 0 个匹配项db_name
。我究竟做错了什么?这是我的测试代码:
var inputs = new string [] {
"some text DEFAULT_DATABASE = [master] more [more] text",
"some text DEFAULT_DATABASE = [masters] more [more] text",
"some text DEFAULT_DATABASE = [abc] more [more] text"
};
var re = new Regex(@"DEFAULT_DATABASE\s*=\s*\[(?!master)\]");
foreach (var input in inputs) {
if (re.IsMatch(input)) {
Console.WriteLine($"Match: {input}, value: {re.Match(input).Value}");
}
}
解决方案
为什么不使用基本的 Linq?也许我错过了一些东西......这样的事情怎么样:
var inputs = new string[]{
"some text DEFAULT_DATABASE = [master] more text"
, "some text DEFAULT_DATABASE = [masters] more text"
, "some text DEFAULT_DATABASE = [abc] more text"};
var matchs = inputs
.Select(x => x.Substring(x.IndexOf("DEFAULT_DATABASE = ["))) // trim start
.Select(x => x.Remove(x.IndexOf("]") + 1)) // trim end
.Where(x => !x.Contains("[master]"));
foreach (var input in matchs)
{
Console.WriteLine($"Match: {input}");
}
推荐阅读
- javascript - 在 EJS 页面中使用 Object.keys()
- php - MySQL LEFT JOIN - 如何处理记录与 PHP 不匹配的情况
- odoo-13 - 仅在 odoo 13 企业版中隐藏编辑按钮管道最后阶段
- kotlin - 用 !! 抛出自定义空断言 Kotlin 中的运算符?
- algorithm - 跟随的时间复杂度是多少?
- python - 为什么我从 Twitter 中提取关键字的代码没有打印任何内容?
- r - 将点转换为 sf R 中宽度 x km 和高度 y km 的矩形多边形
- html - 关于 robots.txt 禁止参数 URL
- python - xgboost 和 py-xgboost 的区别?
- javascript - Firebase 身份验证。更新所有项目文件