簡體   English   中英

C#刪除字符串之外的所有額外出現的內容

[英]C# Removing all extra occurrences BEYOND the FIRST in string

因此,我有一些代碼可以按照自己的方式工作,但是我想知道是否有更好的方法使用正則表達式來做到這一點? 我玩過一些正則表達式,但是運氣不好(而且我知道我需要在正則表達式方面變得更好)。

該代碼純粹是為了刪除任何多余的空格或非電子郵件有效字符。 然后它通過並刪除第一個符號之外的多余@符號。

        List<string> second_pass = new List<string>();
        string final_pass = "";

        if (email_input.Text.Length > 0)
        {
            string first_pass = Regex.Replace(email_input.Text, @"[^\w\.@-]", "");

            if (first_pass.Contains("@"))
            {
                second_pass = first_pass.Split('@').Select(sValue => sValue.Trim()).ToList();

                string third_pass = second_pass[0] + "@" + second_pass[1];

                second_pass.Remove(second_pass[0]);
                second_pass.Remove(second_pass[1]);

                if (second_pass.Count > 0)
                {
                    final_pass = third_pass + string.Join("", second_pass.ToArray());
                }
            }

            email_output.Text = final_pass;
        }

按照您的描述而不是代碼:

var final_pass = email_input.Text;
var atPos = final_pass.IndexOf('@');
if (atPos++ >= 0)
    final_pass = final+pass.Substring(0, atPos) + Regex.Replace(final_pass.Substring(atPos), "[@ ]", "");

對於(幾乎)純正則表達式解決方案,使用狀態便宜的方法,這似乎可行:

var first = 0;
final_pass = Regex.Replace(final_pass, "(^.+?@)?([^ @]+?)?[@ ]", m => (first++ == 0) ? m.Groups[1].Value+m.Groups[2].Value : m.Groups[2].Value);

如果您可以僅替換捕獲的組,那么這應該可以工作。

([^\\w\\.\\@\\-])|(?<=\\@).*?(\\@)

演示版

暫無
暫無

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

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