RegEx Query - 替换字符串部分内的空格

时间:2011-10-24 14:29:36

标签: regex vb.net string

我有一个程序通过SQL语句,用空格标识组件部分。例如: -

SELECT * FROM tblSales WHERE CustomerID=10 AND Year=2011

将产生以下作为单独的组件: -

“SELECT”,“*”,“FROM”,“tblSales”,“WHERE”,“CustomerID = 10”,“AND”和“Year = 2011”

我遇到的问题是在值中使用空格,例如: -

SELECT * FROM tblSales WHERE CustomerNameID='Test Company' AND Year=2011

使用相同的空间分隔逻辑,这将产生以下组件: -

“SELECT,”*“,”FROM“,”tblSales“,”WHERE“,”CustomerID ='Test“,”Company“,”AND“和”Year = 2011“。

即“测试”与“测试”之间的空间。 “公司”使其被视为两个独立的组成部分。

问题是,是否可以通过RegEx.Replace用另一个字符替换引号之间的空格,同时保留字符串中的所有其他空格?

肖恩。

2 个答案:

答案 0 :(得分:1)

假设您没有任何转义引号,您只需检查您正在查看的空格是否后跟偶数引号(这意味着它在字符串之外)。

所以

splitArray = Regex.Split(subjectString, " (?=(?:[^']*'[^']*')*[^']*$)");

为您提供所需的结果。

作为一个冗长的正则表达式:

[ ]        # Match a space
(?=        # only if it's followed by...
 (?:       # This subregex:
  [^']*'   #  any number of non-quote characters, followed by a quote
  [^']*'   #  same again (to ensure even number of quotes)
 )*        # zero or more times.
 [^']*     # and any number of non-quote characters until...
 $         # the end of the string.
)          # End of lookahead.

答案 1 :(得分:1)

可能?也许。也许不吧。当然不是微不足道的。使用正则表达式解析SQL几乎与parsing HTML with regexes一样糟糕,或者可能更糟糕......

您可能希望poke around SO并寻找其他尝试解析SQL的人......