C#正则表达式替换模式(替换字符串)返回$ 1

时间:2010-09-15 19:41:38

标签: c# regex replace

我目前正在处理从SQL Server解析一些数据,而且我需要有关Regex的帮助。

我在Sql Server 2005中有一个程序集帮助我使用C# Regex.Replace()方法替换字符串。

我需要解析以下内容。

    Strings:

    CAD 90890

    (CAD 90892)

    CAD G67859

    CAD 34G56

    CAD 3S56.

    AX CAD 890990

    CAD 783783 MX

    Needed Results:

    90890

    90892

    G67859

    34G56

    3S56

    890990

    783783 

SELECT TOP 25 CADCODE, dbo.RegExReplace(CADCODE, '*pattern*', '$1')
FROM dbo.CADCODES
WHERE CADCODE LIKE '%CAD%'

我需要在CAD单词之后获取正在进行的字符串,直到它到达空白区域或任何不是数字或数字的字符串。我设法得到了数字但其他人确实失败了。我试图让它工作,但我找不到真正的解决方案。

提前致谢。

已更新以反映新字符串

AX CAD 890990

CAD 783783 MX

4 个答案:

答案 0 :(得分:1)

试试这个:

(\w+)\W*$

模式匹配最后一个单词 - 由字母数字(和下划线)组成 示例:http://www.rubular.com/r/1zWQQVLZy1

另一种选择是找到一个至少有一个数字的单词 - 这个单词可以匹配字符串中的任何位置,因此您可能需要处理多个匹配项。在这种情况下,您可以在整个模式周围添加捕获组,或使用$&替换。

[a-zA-Z_]*\d\w*

示例:http://www.rubular.com/r/XUrFNuPQUv

如果您无法匹配(Regex.Match)并且必须使用Regex.Replace,则可以匹配整个字符串的开头到结尾,并将其替换为您需要的组:

RegExReplace(CADCODE, '^.*\b([a-zA-Z_]*\d\w*)\b.*$', '$1')

答案 1 :(得分:1)

我认为这就是你所追求的:

^\W*\w*CAD\w*\W*(\w+)\W*$

正则表达式必须匹配整个字符串,因此RegExReplace可以用$1替换它,有效地剥离不需要的部分。

编辑:让我备份并确保我做对了。因为

WHERE CADCODE LIKE '%CAD%'

在您的查询中,您已经知道每个字符串都包含序列CAD。在这种情况下,不需要通过再次匹配该序列来使正则表达式复杂化。这应该是你所需要的:

^.*?(\w+)\W*$

答案 2 :(得分:0)

试试这个:

(?:\(CAD\)|CAD)\s+?([\dA-Z]+)

您可以从捕获组编号1获取结果。

答案 3 :(得分:0)

正则表达式的问题在于,如果您的样本集有限,那么获得良好的模式总是很容易。

在您的情况下,您使用: \ W {4} \ W *

其中只说4个字母数字,然后是0个或更多的字母数字,所以所有CAD部分都不匹配,空格或()也不匹配。