正则表达式 - 删除匹配的正则表达式

时间:2014-05-28 13:43:00

标签: c# regex

如何从字符串中删除应用的正则表达式并返回原始字符串。

我有字符串

  

12345679

在应用正则表达式后,我得到了字符串

  

" 123-456 + 789"

在我的代码中我有不同类型的正则表达式,我想找到哪个正则表达式与当前字符串匹配并将其转换回原始格式

我可以使用

找到正则表达式
Regex.IsMatch() 

但如何获得原始字符串?

这是一段代码

     /// <summary>
        /// Initializes a new instance of the <see cref="MainWindow"/> class.
        /// </summary>
        public MainWindow()
        {
          this.InitializeComponent();
          this.patientIdPattern = @"^(\d{3})(\d{3})(\d{3})";
          this.patientIdReplacement = "$1-$2+$3";
        }

        /// <summary>
        /// Handles the OnLostFocus event of the UIElement control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="System.Windows.RoutedEventArgs"/> instance containing the event data.</param>
        private void UIElement_OnLostFocus(object sender, RoutedEventArgs e)
        {
          string formatted = Regex.Replace(textBox.Text, this.patientIdPattern, this.patientIdReplacement);
          lblFormatted.Content = formatted;
        }


public void GetOriginalString(string formattedString)
{
//// Now here i want to convert formatted string back to original string.
}

2 个答案:

答案 0 :(得分:1)

完整匹配始终位于MatchCollection返回的Regex.Matches的索引0处。

试试这个:

string fullMatch = "";

var matchCollection = Regex.Matches(originalText, regex);

foreach(var match in matchCollection)
{
   fullMatch = match.Groups[0].Value;
   break;
}

答案 1 :(得分:0)

除了自己保留原始输入之外,没有办法让Regex返回原始输入。因为,取决于您如何使用它,Regex.Replace可能是单向转换。您的选择是:

  1. 保留原件的副本。
  2. 手工制作某种方式来恢复转型。这不能神奇地
  3. Regex.Replace("123-456+789", @"^(\d{3})\-(\d{3})\+(\d{3})", "$1$2$3")