代码之家  ›  专栏  ›  技术社区  ›  Michael D. Irizarry

C#Regex Replace Pattern(Replace String)返回$1

  •  2
  • Michael D. Irizarry  · 技术社区  · 15 年前

    我在SQLServer2005中有一个程序集,它可以帮助我使用C替换字符串# 正则表达式替换()

    我需要分析以下内容。

        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单词后获取继续的字符串,直到它碰到一个空格或任何不是数字或数字的东西。我设法得到了数字,但对其他人来说真的失败了。我正努力使它发挥作用,但我找不到真正的解决办法。

    更新以反映新字符串

    783783加元MX

    4 回复  |  直到 15 年前
        1
  •  1
  •   Kobi    15 年前

    试试这个:

    (\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')
    
        2
  •  1
  •   Alan Moore Chris Ballance    15 年前

    我想这就是你想要的:

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

    regex必须匹配整个字符串,以便RegExReplace可以用 $1

    编辑:让我往后退一步,确保我的回答正确。因为

    WHERE CADCODE LIKE '%CAD%'
    

    在查询中,您已经知道每个字符串都包含序列 CAD . 既然如此,就没有必要通过再次匹配该序列来使正则表达式复杂化。这就是你所需要的:

    ^.*?(\w+)\W*$
    
        3
  •  0
  •   Callum Rogers    15 年前

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

    您可以从捕获组编号获得结果 1 .

        4
  •  0
  •   LoveMeSomeCode    15 年前

    regex的问题是,如果样本集有限,那么获得一个好的模式总是很容易的。

    \w{4}\w*

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