如何在微软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个逗号
答案 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
替换任何必要的字符类。
答案 2 :(得分:0)
试试这个。+,。+,。+,。+,。+ 它将匹配所有带有4个逗号的文本(假设行不以逗号开头,不以逗号结尾,至少两个逗号之间的一个字符)