此正则表达式模式的C#等价物
我有一个正则表达式模式:此正则表达式模式的C#等价物,c#,regex,regex-lookarounds,regex-group,C#,Regex,Regex Lookarounds,Regex Group,我有一个正则表达式模式:{2}\@.{2}\K}\.*(*跳过)(?!)。(?=.*) 它可以完美地转换以替换要获取的匹配项 trabc@abtrec.com.lo => ***bc@ab*****.com.lo demomail@demodomain.com => ******il@de*********.com 但是当我尝试在C上使用它时,不允许使用\K和(*SKIP)和(*F) 这种模式的c版本是什么?或者,您知道一种更简单的方法来屏蔽电子邮件,而不使用不受支持的模式条目吗
{2}\@.{2}\K}\.*(*跳过)(?!)。(?=.*)
它可以完美地转换以替换要获取的匹配项
trabc@abtrec.com.lo => ***bc@ab*****.com.lo
demomail@demodomain.com => ******il@de*********.com
但是当我尝试在C上使用它时,不允许使用\K和(*SKIP)和(*F)
这种模式的c版本是什么?或者,您知道一种更简单的方法来屏蔽电子邮件,而不使用不受支持的模式条目吗
更新:
(*跳过):如果模式的其余部分不匹配,则该动词会导致在主题的当前起始位置匹配失败
(*F):在模式中的给定位置强制匹配失败(与(?!)尝试此正则表达式:
\w(?=.{2,}@)|(?<=@[^\.]{2,})\w
\w(?=.{2,}@)|(?使用与一个块中的项匹配的正则表达式,并应用自定义匹配计算器,可以获得相同的结果:
var res = Regex.Replace(
s
, @"^.*(?=.{2}\@.{2})|(?<=.{2}\@.{2}).*(?=.com.*$)"
, match => new string('*', match.ToString().Length)
);
var res=Regex.Replace(
s
,@“^.*(?=.{2}\.{2}){124;(?正如你所观察到的,它们不是有效的C#东西,你可能想解释它们做什么。你会让大多数C#人看这个问题,他们不知道他们做什么…我只是更新模式并为*Skipy添加一个细节。你也可以看看,你可能不知道这一点,但当{2}.{2}\K
匹配某个字符,替换的结果是在刚刚超过它的当前位置注入一个星号。这并不代表我所知道的任何类型的掩蔽,因为您添加了一个以前没有位置的字符。另外,这个。{2}\@{2}
\K部分将匹配点字符。您需要进行更改以防止出现这种情况。此外,在使用此术语(=.*.\)
时,您将无法获得与此术语{2}\@.{2}\K
等效的值。如果进行简单替换,则必须使用委托回调。因此,通过删除\K
和(*跳过)(?!)
和添加捕获组,您将知道替换什么和跳过什么。ai@PP.emodomain.com
没有屏蔽。@sln是的,它不会屏蔽任何东西。看看他原来的正则表达式,似乎他不想屏蔽紧跟在@
前面的两个字符和紧跟在@
后面的两个字符。因此,这样的解决方案是的。而且,你的sol'n没有解决这个{2}\.{2}\K
,他用它插入*
,而不是替换。我希望人们坐火车到正确的车站,而不是靠近目的地的车站。