2012-06-05 69 views
0

好吧我在RegEx上肯定很糟糕,因为我很少需要它,但是我发现自己处于一种简单的解析就是不切割它的情况。因此,在试图在工作中坐在这里教授我自己的整个RegEx时,我终于放弃并问专家。我只是简单地解析一个sql文件并将其分解到GO声明中。问题是我不能拉GO换掉其他词,比如CREATE TABLE GOPHER。所以我觉得我很安全,说我分裂时,我有一条线,这是只有空格,字GO不区分大小写。简单的RegEx表达式

以下是我的,我认为它非常接近,但我做错了,因为它现在不匹配任何东西。

^+\s*[GO]\s*\Z 

*注情况下,可以照顾与忽略大小写的标志,所以我不担心这一点

如果我只是写

^+[GO]+\Z 

它主要工作,但它不会忽略GO前后的空格,我认为\s*会这样做,但它似乎没有返回任何匹配。任何人都可以为我解决这个问题,并简短地解释我在这里会发生什么?

+0

'[GO]'装置** 'G' ** **或 'O' **。如果你想让整个字符串简单写'GO'或者(GO)' – davioooh

+0

啊我看到了,所以我的空间逻辑是正确的,我只是在愚蠢地认为是在第二行和第一行之间打破它。 –

回答

3

使用Regex.Split与模式@"(?<=\bGO\b)",它匹配完整单词“GO”后的零宽度边界。

参见

+0

相比其他答案,使用它有什么优势吗? @“^ + \ s *(GO)\ s * \ Z”,因为这似乎对我有用,我必须做更多的工作才能完全理解您的答案。 –

+0

“其他答案”会匹配“年前”,并且不匹配“GO;”。与任何语言一样,使用正则表达式,您应该描述您的实际含义:“在单词”GO“之后分割”。此外,SQL可以用分号而不是换行符分隔,所以使用单词边界锚点比换行锚点更好。 –

+0

不是^表示新行然后空格?那么多年前不是换行符那么空格,那里还有其他字母?但我想你是对的,谢谢您的帮助。 –