为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式除以的最后一个索引

正则表达式除以的最后一个索引

C#
慕姐4208626 2021-04-12 17:18:08
我有基于.net regex函数的SQL CLR函数,以便通过正则表达式拆分值。在一种情况下,我正在使用函数将值除以|。问题是我发现其中一个值具有double ||。因为我确定第二个值(右值)是一个数字,所以我知道第二个|值是第一个值(左值)的一部分。我有:慂||2215并且应该将其拆分为:慂|2215我正在使用此表达式拆分[|]。我认为,为了使其正常工作,我需要使用,Zero-width negative look ahead assertion.但是当我拆分时,(?![|])[|]我得到:慂||2215如果我试着往后看-(?<![|])[|]我会得到:慂|2215但我需要将管道作为第一个值的一部分。有人可以帮我吗?只寻找正则表达式解决方案,因为现在无法更改应用程序。如果有人需要,这里是该函数:/// <summary>///     Splits an input string into an array of substrings at the positions defined by a regular expression pattern.///     Index of each value is returned./// </summary>/// <param name="sqlInput">The source material</param>/// <param name="sqlPattern">How to parse the source material</param>/// <returns></returns>[SqlFunction(FillRowMethodName = "FillRowForSplitWithOrder")]public static IEnumerable SplitWithOrder(SqlString sqlInput, SqlString sqlPattern){    string[] substrings;    List<Tuple<SqlInt64, SqlString>> values = new List<Tuple<SqlInt64, SqlString>>(); ;    if (sqlInput.IsNull || sqlPattern.IsNull)    {        substrings = new string[0];    }    else    {        substrings = Regex.Split(sqlInput.Value, sqlPattern.Value);    }    for (int index = 0; index < substrings.Length; index++)    {        values.Add(new Tuple<SqlInt64, SqlString>(new SqlInt64(index), new SqlString(substrings[index])));    }    return values;}
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

您应在此处使用否定的前瞻而不是向后看

[|](?![|])

正则表达式演示

细节

  • [|]-匹配一个|字符

  • (?![|])-否定的超前查询,无需|在当前位置的右侧立即添加任何字符。

//img1.sycdn.imooc.com//607a786000012a9004360112.jpg

查看完整回答
反对 回复 2021-04-17
  • 1 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信