首先跳过nn个字符,然后使用RegEx

时间:2015-12-10 19:39:12

标签: .net regex

我看到一个question使用了记事本++ / pcre / PHP中的\ K(重置起始点)。但是,我无法在Mastering Regular Expressions或Regular Expression Cookbook中找到此选项或其等价物。

如何跳过指定数量的字符?我用Expresso做了一个替换^。{15},这消除了前15个。我是在正确的轨道上,还是有更好的方法?

3 个答案:

答案 0 :(得分:5)

在PCRE,Oniguruma,Boost,ICU正则表达口味\K is a kind of a lookbehind construct

  

这种构造有一种特殊形式,称为\K(自Perl 5.10.0起可用),它使正则表达式引擎能够保持"保持"它在\K之前匹配的所有内容,并未包含在$&中。 这有效地提供了可变长度的后视 。允许在另一个环视断言中使用\K,但目前行为尚未明确定义。

在.NET中,\K不是必需的,因为它有variable-width (or infinite-width) lookbehind

  

(?<=subexpression)是一个积极的外观断言;也就是说,当前位置之前的一个或多个字符必须与子表达式匹配。

要匹配前15个任意字符后的数字,请使用

(?<=^.{15})\d

请参阅demo

不要忘记,为了使点匹配换行符,您需要使用RegexOptions.Singleline

来自rexegg.com的说明:

  

支持无限宽度外观的唯一两种编程语言风格是.NET(C#,VB.NET,...)和Matthew Barnett的regex module用于Python。

作为奖励:您当前的要求并不意味着您依赖于无限宽度的后视。只需使用捕获组:

var s = Regex.Replace("1234567890123456", @"^(.{15})\d", "$1*");

最后6将替换为*,并使用$1反向引用在结果字符串中恢复开头。

答案 1 :(得分:2)

尝试(?<=.{15}).+

在这里玩:http://refiddle.com/2te3

答案 2 :(得分:1)

技术上不会跳过这些角色,因为它们被消耗并被视为匹配的一部分。如果您想跳过这些字符,那么您需要了解一下

(?<=(.){15})