Regex 正则表达式:替换部分动态字符串
我有一根绳子 IsNull(VSK1\u DVal.RuntimeSUM,0), 我需要删除IsNull部分,因此结果将是 VSK1\u DVal.RuntimeSUM, 我对RegEx非常陌生,但这不会是一个问题,如果不是一件事的话:Regex 正则表达式:替换部分动态字符串,regex,sql-server-2005,Regex,Sql Server 2005,我有一根绳子 IsNull(VSK1\u DVal.RuntimeSUM,0), 我需要删除IsNull部分,因此结果将是 VSK1\u DVal.RuntimeSUM, 我对RegEx非常陌生,但这不会是一个问题,如果不是一件事的话: VSK1是动态部件,可以是A-Z、0-9和任意长度的任意组合。如何用正则表达式替换字符串?我使用MSSQL 2k5,我认为它使用了一组通用的正则表达式规则 编辑:我忘了说,我正在SSMS查询窗口的替换框(^H)中进行替换-而不是构建正则表达式查询 溴 马吕斯 然
VSK1是动态部件,可以是A-Z、0-9和任意长度的任意组合。如何用正则表达式替换字符串?我使用MSSQL 2k5,我认为它使用了一组通用的正则表达式规则 编辑:我忘了说,我正在SSMS查询窗口的替换框(^H)中进行替换-而不是构建正则表达式查询 溴 马吕斯
然后选择组匹配号1。这里有一个正则表达式应该可以工作:
[^(]+\(([^,]+),[^)]\)
orig = "somestuff = IsNull(VSK1_DVal.RuntimeSUM,0),"
regex = /=\s*\w+\(([^,]+),[^)]\)/
result = orig.sub(regex){$1} # result => somestuff = VSK1_DVal.RuntimeSUM,
然后使用$1
捕获组提取所需的零件
我在ruby中做了一次理智检查:
orig = "IsNull(VSK1_DVal.RuntimeSUM,0),"
regex = /[^(]*\(([^,]+),[^)]\)/
result = orig.sub(regex){$1} # result => VSK1_DVal.RuntimeSUM,
如果你有一个你想要保留的前缀,它会变得更加棘手。如果你有这个:
"somestuff = IsNull(VSK1_DVal.RuntimeSUM,0),"
在这种情况下,您需要某种方法来识别模式的开始。也许您可以使用“=”来标识模式的开始?如果是这样,这应该是可行的:
[^(]+\(([^,]+),[^)]\)
orig = "somestuff = IsNull(VSK1_DVal.RuntimeSUM,0),"
regex = /=\s*\w+\(([^,]+),[^)]\)/
result = orig.sub(regex){$1} # result => somestuff = VSK1_DVal.RuntimeSUM,
但是没有等号的情况就会失败。也许您可以使用“IsNull”来标识模式的开始?如果是,请尝试以下操作(注意表示不区分大小写匹配的“/i”):
这是一个非常有用的站点: 他们有一个测试仪和一个备忘单,这对此类快速测试非常有用 我测试了Dave的解决方案,它运行良好,除了它还删除了您希望保留的尾随逗号。小事一桩 试试这个:
IsNULL\((.*,)0\)
你在你的问题中说
我使用MSSQL 2k5,我认为它使用 正则表达式规则的一般集合 除非启用CLR并编译和安装程序集,否则情况并非如此。您可以使用其本机模式匹配语法和
LIKE
,如下所示
WITH T(C) AS
(
SELECT 'IsNull(VSK1_DVal.RuntimeSUM,0),' UNION ALL
SELECT 'IsNull(VSK1_DVal.RuntimeSUM,123465),' UNION ALL
SELECT 'No Match'
)
SELECT SUBSTRING(C,8,1+LEN(C)-8-CHARINDEX(',',REVERSE(C),2))
FROM T
WHERE C LIKE 'IsNull(%,_%),'
“我使用MSSQL 2k5,我认为它使用的是一套通用的正则表达式规则。”除非启用CLR并编译和安装程序集,否则这是不正确的。嗨,Martin,我绝对忘了说,我需要在SSMS查询窗口中替换,而不是直接在TSQL中替换……嗨,Dave,我有很长的脚本,这些字符串只是其中的一部分。。您的脚本找到了我需要的部分,但之前也有很多字符,如果我的字符串不在第行的开头:VSK1_DVal_SUM=isnull(VSK1_DVal.RuntimeSUM,0)这是我的行,您的正则表达式将选择所有字符串,而不是isnull的部分(…嗨,巴拉,我又添加了两个例子,希望能帮助你保留前缀。祝你好运!嗨,戴夫,因为我必须替换IsNul…,它可以作为模式的开始。我将尝试你的解决方案,并通知你一切是否顺利哦,孩子。这些都没有发现任何东西。看来,我们必须更简单一点——用它编写某种文本解析器c#。仅仅为了一个项目学习正则表达式需要付出很大的努力……这个项目发现字符串没有问题。但是如何替换它呢?