如何在微软 IDE(如 VS 或 MSSQL)上使用正则表达式隔离不包含 4 个逗号的行
下面的例子
abcd,efg,hi,jk,a
abd,fef,rgr,ht
abd,aad,rhrhr,rtre
dfsf,sdf,sfsdf,sd,fs
在上面的例子中,我需要隔离线
abd,fef,rgr,ht
abd,aad,rhrhr,rtre
因为他们没有 4 个逗号
如何在微软 IDE(如 VS 或 MSSQL)上使用正则表达式隔离不包含 4 个逗号的行
下面的例子
abcd,efg,hi,jk,a
abd,fef,rgr,ht
abd,aad,rhrhr,rtre
dfsf,sdf,sfsdf,sd,fs
在上面的例子中,我需要隔离线
abd,fef,rgr,ht
abd,aad,rhrhr,rtre
因为他们没有 4 个逗号
在 Visual Studio (2012) 中:
^(?![^,\n]*,[^,\n]*,[^,\n]*,[^,\n]*,).*$
或者,简化:
^(?!([^,\n]*,){4}).*$
在 SQL Server Management Studio (2012) 中:
^~([^,]*,[^,]*,[^,]*,[^,]*,).*$
解释:
以上都假设我们必须排除包含 4 个或更多逗号的行。要使其仅排除包含正好 4 个逗号的行,只需将[^,\n]*$
和[^,]*$
分别添加到括号中的部分,即:
^(?![^,\n]*,[^,\n]*,[^,\n]*,[^,\n]*,[^,\n]$).*$
^(?!([^,\n]*,){4}[^,\n]$).*$
^~([^,]*,[^,]*,[^,]*,[^,]*,[^,]$).*$
两者都使用负前瞻(有关更多详细信息,请参阅this),它们只需要不同的语法。
此外,在 SSMS 中,您不需要换行 ( \n
) 检查(但包括它并没有太大变化),并且{4}
语法似乎不起作用。
^
- 线的开始。
(?!...)
或~(...)
- 否定前瞻的语法。
[^,\n]*
- 零个或多个不是逗号或换行符的字符。
[^,]*
- 零个或多个非逗号字符。
.*
- 零个或多个。
$
- 行结束。
{4}
- 恰好出现在它之前的任何内容的 4 次。
为什么不只是这个?
^(?!.*,.*,.*,.*,).*$
有人可能会争辩说你可以只使用上面的,但这实际上会更慢,因为它需要回溯,因为第一个.*
将尝试匹配整行,然后它会回溯到最后一个,
,下一个.*
将匹配整行,然后它会回溯到倒数第二个,
,依此类推。
这个正则表达式似乎对我有用:
(^(\w*?,){0,3}\w*$|^(\w*?,){5,}\w*$)
它搜索包含 0 到 3 或 5 次或更多逗号的行。随意\w
用任何必要的字符类代替。
试试这个 .+,.+,.+,.+,.+ 它将匹配所有带有 4 个逗号的文本(假设行不以逗号开头,不以逗号结尾,2 个逗号之间至少有一个字符)