Excel [技巧]正则表达式通用公式的应用示例

电脑杂谈  发布时间:2020-06-20 13:09:00  来源:网络整理

js正则表达式使用变量_shell 正则表达式 实例_正则表达式使用实例

DevilW发表于2019-7-5 00:13

. *?(^ |;)有点不理解,此^通常表示目标文本的开头,没有转义,也不作为否定字符组元素放在方括号中...

根据我建议的正则表达式通用公式: . *?(eXp)|. +

此处的eXp是正则表达式变量. 在此示例中,它需要直接匹配“用分号分隔的非空,非重复字符项”

因此,eXp的基本功能是:

正则表达式使用实例_js正则表达式使用变量_shell 正则表达式 实例

1. 它由至少一个非分号字符组成,即: ([^;] +)

2. 它必须以分号或源字符串的起始位置开头正则表达式使用实例,即: (^ |;)

3. 它后面必须跟一个分号或源字符串的结束位置,即表达式3: (?=; | $)

以上按顺序连接,即(^ |;)([^;] +)(?=; | $)

此类字符项可能是重复项,目标是仅采用非重复项(相同项仅采用最后一项)

正则表达式使用实例_js正则表达式使用变量_shell 正则表达式 实例

因此,您需要为其添加限制:

(?!. *; \ 2(; | $))

因此: (eXp)=“(^ |;)([^;] +)(?=; | $)(?!. *; \ 2(; | $))”

如果使用正则表达式的Execute方法,则.Pattern = eXp;

使用正则表达式的Replace方法,将(eXp)放入此回复开头给出的通用公式中,即:

js正则表达式使用变量_shell 正则表达式 实例_正则表达式使用实例

. *?(^ |;)([^;] +)(?=; | $)(?!. *; \ 2(; | $))|. +

这时,正则表达式替换方法的第二个参数可以是“ $ 2;”,但获得的结果基本上与预期结果匹配,但是当源字符串是分号“;”时. 最后,获得的结果在“ ;;”之后出现两个额外的分号.

如果您只想使用一个正则替换来完美解决它(即,不会生成多余的分号),则可以在此示例中使用一个特殊的技巧,即,正则表达式的第二个参数中的分隔符Replace方法不使用常量“;”,而是使用变量$ 3从源字符串中捕获.

因为,对于所有非重复项,根据其后面的字符的特性,它可以分为两类: 一类是除最后一项以外的其他项目,每项都必须跟多个分号“;”作为分隔符;第二种只是最后一种,必须在其后跟随任意数量的分号. “;”到达最终位置后.

为此,我们在表达式3中添加捕获组,捕获分号“;”,并成为“(;)”,并根据匹配优先级的需要调整分支选择运算符的顺序,然后更改为: (?=; * $ |(;))

正则表达式使用实例_js正则表达式使用变量_shell 正则表达式 实例

这样,当捕获到$ 3时,对于上述第一个类别,分号“;”将被捕获​​,对于第二个类别,即最后一个项目,将在选择上一个分支时完成匹配,使$ 3捕获一个空字符串. 此外,当源字符串以多个分号“;”结尾时,这些分号将与表达式“. +”的最后一个分支匹配,这一次,两个子表达式$ 2和$ 3将匹配所有捕获的内容均为空字符串. 因此,最后不会在末尾产生多余的分号.

最后一个表达式是:

. *?(^ |;)([^;] +)(?=; * $ |(;))(?!. *; \ 2(; | $))|. +

如果您有细心的朋友,您可能会发现此最终表达式与我在一楼的附件中的公式1中使用的表达式不完全相同. 后者还在表达式“; + $ |”的开头添加了一个分支正则表达式使用实例,但是如果将最终表达式替换为工作表的公式,则会发现此最终表达式也是正确的. 这也证明了通用公式的正确性. 实际上,表达式“; + $ |”匹配可能出现在源字符串末尾的多个分号. 在这种情况下,它是优先级最低的“ |. +”的特殊形式,并且因为是. 其他分支匹配是互斥的,因此可以将它们写入任何分支位置. 相反,一般形式“ |. +”只能放在末尾,否则一旦开始匹配就会消耗所有字符,从而导致后面的分支匹配完全无效.

最后,在一楼的附件的公式2中,还存在完全冗余的分支匹配. 有兴趣的朋友可以尝试找出来. 那些首先回答正确答案的人将收到我赠送的三朵玫瑰!


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-252146-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...