我目前正在处理从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
答案 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部分都不匹配,空格或()也不匹配。