簡體   English   中英

此正則表達式模式的C#等效項

[英]C# equivalent for this regex pattern

我有這個正則表達式模式: .{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):在模式中的給定位置強制匹配失敗(與(?!相同)

試試這個正則表達式:

\w(?=.{2,}@)|(?<=@[^\.]{2,})\w

點擊演示

說明:

  • \\w匹配單詞字符
  • (?=.{2,}@) -正向查找以立即找到位置,然后再出現2個以上的任意字符,再跟@
  • | - 要么
  • (?<=@[^\\.]{2,}) -向后查找,以查找緊接@的位置,然后出現2​​個以上非字符的位置.
  • \\w匹配單詞字符。

將每個匹配項替換為*

您可以使用正則表達式來實現相同的結果,該正則表達式匹配一個塊中的項目,並應用自定義匹配評估器:

var res = Regex.Replace(
    s
,   @"^.*(?=.{2}\@.{2})|(?<=.{2}\@.{2}).*(?=.com.*$)"
,   match => new string('*', match.ToString().Length)
);

正則表達式包含兩個部分:

  • 左邊的^.*(?=.{2}\\@.{2})匹配用戶名部分,但最后兩個字符除外
  • 右邊的那個(?<=.{2}\\@.{2}).*(?=.com.*$)匹配域的后綴,直到“ .com ...”結尾。

演示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM