正则表达式以隔离没有逗号的行

时间:2013-07-26 11:33:38

标签: regex visual-studio

如何在微软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个逗号

3 个答案:

答案 0 :(得分:2)

在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次出现在它之前。

为什么不呢?

^(?!.*,.*,.*,.*,).*$

有人可能认为你可以使用上面的内容,但这实际上会慢一点,因为它需要回溯,因为第一个.*会尝试匹配整行,然后它会回溯到最后一行,和下一个.*将匹配整行,然后它将回溯到倒数第二个,等。

答案 1 :(得分:1)

这个正则表达式似乎对我有用:

(^(\w*?,){0,3}\w*$|^(\w*?,){5,}\w*$)

它搜索包含0到3或5个以及更多逗号的行。随意用\w替换任何必要的字符类。

示例:http://www.regex101.com/r/aZ0wI3

答案 2 :(得分:0)

试试这个。+,。+,。+,。+,。+ 它将匹配所有带有4个逗号的文本(假设行不以逗号开头,不以逗号结尾,至少两个逗号之间的一个字符)