用于比较字符串和空格的正则表达式

时间:2013-09-12 05:59:31

标签: regex string

我试图比较是使用正则表达式在字符串列表中存在一个字符串。

我尝试使用以下内容......

(?!MyDisk1$|MyDisk2$)

但这对于像

这样的场景来说并不起作用
(?!My disk1$|My Disk2$)

你能否建议一个更好的方法来应对这种情况..

我从sql查询中获取字符串列表...所以我不确定空格在哪里。字符串列表有所不同,如My Disk1,MyDisk2,My_Disk3,ABCD123,XYZ_123,MNP 123等....或任何其他字符串[a-zA-Z0-9_]

3 个答案:

答案 0 :(得分:1)

您可以使用零或一个量词(?)使空格可选:

(?!My ?disk1$|My ?Disk2$)

此断言将拒绝MyDisk2My Disk2等子字符串。或者要处理可能的许多空格,请使用零或多个量词(*):

(?!My *disk1$|My *Disk2$)

请注意,如果您在忽略模式中的空格的引擎中运行它,则可能需要使用字符类,如下所示:

(?!My[ ]*disk1$|My[ ]*Disk2$)

或处理空格或下划线:

(?!My[ _]*disk1$|My[ _]*Disk2$)

不幸的是,如果空格可以在字符串中的任何位置,(但你仍然关心按顺序匹配其他字母),你必须做这样的事情:

(?! *M *y *d *i *s *k *1$| *M *y *D *i *s *k *2$)

或处理空格或下划线:

(?![ _]*M[ _]*y[ _]*d[ _]*i[ _]*s[ _]*k[ _]*1$|[ _]*M[ _]*y[ _]*D[ _]*i[ _]*s[ _]*k[ _]*2$)

但说实话,在此之前,在尝试使用正则表达式之前,最好先对数据进行预处理。

答案 1 :(得分:0)

你可以这样做:

/(?[^\s_-]+(\s|_|-)?[^\s_-]*?$)/i

''量词表示前述模式的0或1。 / i是不区分大小写的。分隔符可以是空格或下划线或破折号。我用长度为1或更多的字符串替换My和disk,它不包含空格,下划线或破折号。现在它将匹配" Shikhar Subedi" " dprpradeep"或者" MyDisk 54"。

+量词表示1或更多。 ^表示不。 *表示0或更多。所以空格后的字符串是可选的。

答案 2 :(得分:0)

最后使用此Regex upending i意味着您的regex不区分大小写

/my\s?disk[12]\$/i

这将符合所有可能的情况。