【发布时间】:2018-07-20 11:08:18
【问题描述】:
我有这个正则表达式模式:.{2}\@.{2}\K|\..*(*SKIP)(?!)|.(?=.*\.)
它完美地转换为替换匹配以获取
trabc@abtrec.com.lo => ***bc@ab*****.com.lo
demomail@demodomain.com => ******il@de*********.com
但是当我尝试在 C# 上使用它时,\K 和 (*SKIP) 和 (*F) 是不允许的。
这个模式的 c# 版本是什么?或者您知道在没有不受支持的模式条目的情况下屏蔽电子邮件的更简单方法吗?
更新:
(*SKIP):如果模式的其余部分不匹配,此动词会导致匹配在主语的当前起始位置失败
(*F):强制在模式中给定位置匹配失败(与 (?!) 相同
【问题讨论】:
-
正如您所观察到的,它们不是有效的 C# 东西,您可能想解释它们的作用。你会看到大多数 c# 人在看这个问题,他们不知道他们在做什么......
-
我只是更新了模式并为 *SKIP 添加了一个细节
-
你可能不知道这一点,但是当
.{2}\@.{2}\K匹配某些东西时,替换的结果是在当前位置刚刚过去注入一个星号。这并不代表我所知道的任何掩蔽,因为您添加了一个以前不存在的角色。 -
另外,这个 .{2}\@
.{2}\K 部分将匹配点字符。您需要进行更改以防止这种情况发生。此外,如果做一个简单的替换,当使用这个术语.(?=.*\.)时,你将无法获得这个术语.{2}\@.{2}\K的等价物。您必须使用委托回调。因此,通过删除\K和(*SKIP)(?!)并添加捕获组,您将知道要替换什么以及跳过什么。
标签: c# regex regex-lookarounds regex-group