0

我试图Sysdba.从字符串中取出单词。这是一个例子,我的结果是PRODUCTION

CAST(CASE WHEN SYSDBA.PRODUCTION.SHIPPING_COMPLETE_DATE IS NOT NULL THEN 1 ELSE 0 END AS bit) AS [Shiping Completed]]

我创建了正则表达式

Regex CatagoryRegex = new Regex(@"SYSDBA\.(.#)\.", RegexOptions.IgnoreCase | RegexOptions.Compiled);

但是,当我打电话时,var tmp = CatagoryRegex.Match(SelectText);我没有得到任何匹配。我知道我很可能犯了一个简单的错误,但我无法发现它。

4

2 回答 2

2

您的具体问题是.#将匹配“任何字符”,然后是#字符。

最简单的解决方法可能是使用.+,但这对于您似乎正在做的事情来说有点粗糙。更好的一步是非贪婪.+?,它只会捕获到下一个.(除非它必须走得更远),但我可能会比这更进一步......

要防止.在捕获的组内,请尝试以下表达式:

"SYSDBA\.([^.]+)\."

任何字符在哪里[^.]不是 a .(无需在字符类中转义),+意思是“一个或多个”。

如果您想潜在地允许.在您捕获的组内,您可以使用:

"SYSDBA\.(\S+)\."

其中\S是任何非空白字符(如果空格或换行符则停止匹配)。

于 2010-07-20T19:04:35.910 回答
0

您可能的意思是.*而不是.#.

于 2010-07-20T19:03:48.163 回答