替换/删除与正则表达式 (.NET) 不匹配的字符

发布于 2024-11-10 17:02:03 字数 372 浏览 4 评论 0原文

我有一个正则表达式来验证字符串。但现在我想删除所有与我的正则表达式不匹配的字符。

例如,

regExpression = @"^([\w\'\-\+])"

text = "This is a sample text with some invalid characters -+%&()=?";

//Remove characters that do not match regExp.

result = "This is a sample text with some invalid characters -+";

关于如何使用 RegExpression 来确定有效字符并删除所有其他字符的任何想法。

非常感谢

I have a regular expression to validate a string. But now I want to remove all the characters that do not match my regular expression.

E.g.

regExpression = @"^([\w\'\-\+])"

text = "This is a sample text with some invalid characters -+%&()=?";

//Remove characters that do not match regExp.

result = "This is a sample text with some invalid characters -+";

Any ideas of how I can use the RegExpression to determine the valid characters and remove all the other ones.

Many thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

顾铮苏瑾 2024-11-17 17:02:03

我相信你可以在一行中完成此操作(将字符列入白名单并替换其他所有内容):

var result = Regex.Replace(text, @"[^\w\s\-\+]", "");

从技术上讲,它将产生以下结果:
“这是包含一些无效字符 - + 的示例文本”
这与您的示例略有不同(- 和 + 之间的额外空格)。

I believe you can do this (whitelist characters and replace everything else) in one line:

var result = Regex.Replace(text, @"[^\w\s\-\+]", "");

Technically it will produce this:
"This is a sample text with some invalid characters - +"
which is slightly different than your example (the extra space between the - and +).

浪漫之都 2024-11-17 17:02:03

就这么简单:

var match = Regex.Match(text, regExpression);
string result = "";
if(match.Success)
    result = match.Value;

删除不匹配的字符与保留匹配的字符相同。这就是我们在这里所做的。

如果表达式可能在文本中匹配多次,您可以使用:

var result = Regex.Matches(text, regExpression).Cast<Match>()
                  .Aggregate("", (s, e) => s + e.Value, s => s);

Simple as that:

var match = Regex.Match(text, regExpression);
string result = "";
if(match.Success)
    result = match.Value;

Removing the non-matched characters is the same as keeping the matched ones. That's what we are doing here.

If it is possible that the expression matches multiple times in your text, you can use this:

var result = Regex.Matches(text, regExpression).Cast<Match>()
                  .Aggregate("", (s, e) => s + e.Value, s => s);
来世叙缘 2024-11-17 17:02:03

感谢如果不匹配则替换字符我创建的答案一个去除不接受字符的辅助方法

允许的模式应采用正则表达式格式,期望它们包含在方括号中。函数将在打开方括号后插入波浪号。
我预计它不适用于描述有效字符集的所有正则表达式,但它适用于我们正在使用的相对简单的集。

 /// <summary>
               /// Replaces  not expected characters.
               /// </summary>
               /// <param name="text"> The text.</param>
               /// <param name="allowedPattern"> The allowed pattern in Regex format, expect them wrapped in brackets</param>
               /// <param name="replacement"> The replacement.</param>
               /// <returns></returns>
               /// //        https://stackoverflow.com/questions/4460290/replace-chars-if-not-match.
               //https://stackoverflow.com/questions/6154426/replace-remove-characters-that-do-not-match-the-regular-expression-net
               //[^ ] at the start of a character class negates it - it matches characters not in the class.
               //Replace/Remove characters that do not match the Regular Expression
               static public string ReplaceNotExpectedCharacters( this string text, string allowedPattern,string replacement )
              {
                     allowedPattern = allowedPattern.StripBrackets( "[", "]" );
                      //[^ ] at the start of a character class negates it - it matches characters not in the class.
                      var result = Regex .Replace(text, @"[^" + allowedPattern + "]", replacement);
                      return result;
              }

static public string RemoveNonAlphanumericCharacters( this string text)
              {
                      var result = text.ReplaceNotExpectedCharacters(NonAlphaNumericCharacters, "" );
                      return result;
              }
        public const string NonAlphaNumericCharacters = "[a-zA-Z0-9]";

我的 StringHelper 类中有几个函数 http://geekswithblogs。网/mnf/archive/2006/07/13/84942.aspx
这里使用的。

           /// <summary>
           /// ‘StripBrackets checks that starts from sStart and ends with sEnd (case sensitive).
           ///           ‘If yes, than removes sStart and sEnd.
           ///           ‘Otherwise returns full string unchanges
           ///           ‘See also MidBetween
           /// </summary>

           public static string StripBrackets( this string str, string sStart, string sEnd)
          {
                  if (CheckBrackets(str, sStart, sEnd))
                 {
                       str = str.Substring(sStart.Length, (str.Length – sStart.Length) – sEnd.Length);
                 }
                  return str;
          }
           public static bool CheckBrackets( string str, string sStart, string sEnd)
          {
                  bool flag1 = (str != null ) && (str.StartsWith(sStart) && str.EndsWith(sEnd));
                  return flag1;
          }

Thanks to Replace chars if not match answer I've created a helper method to strips unaccepted characters .

The allowed pattern should be in Regex format, expect them wrapped in square brackets. A function will insert a tilde after opening squere bracket.
I anticipate that it could work not for all RegEx describing valid characters sets,but it works for relatively simple sets, that we are using.

 /// <summary>
               /// Replaces  not expected characters.
               /// </summary>
               /// <param name="text"> The text.</param>
               /// <param name="allowedPattern"> The allowed pattern in Regex format, expect them wrapped in brackets</param>
               /// <param name="replacement"> The replacement.</param>
               /// <returns></returns>
               /// //        https://stackoverflow.com/questions/4460290/replace-chars-if-not-match.
               //https://stackoverflow.com/questions/6154426/replace-remove-characters-that-do-not-match-the-regular-expression-net
               //[^ ] at the start of a character class negates it - it matches characters not in the class.
               //Replace/Remove characters that do not match the Regular Expression
               static public string ReplaceNotExpectedCharacters( this string text, string allowedPattern,string replacement )
              {
                     allowedPattern = allowedPattern.StripBrackets( "[", "]" );
                      //[^ ] at the start of a character class negates it - it matches characters not in the class.
                      var result = Regex .Replace(text, @"[^" + allowedPattern + "]", replacement);
                      return result;
              }

static public string RemoveNonAlphanumericCharacters( this string text)
              {
                      var result = text.ReplaceNotExpectedCharacters(NonAlphaNumericCharacters, "" );
                      return result;
              }
        public const string NonAlphaNumericCharacters = "[a-zA-Z0-9]";

There are a couple of functions from my StringHelper class http://geekswithblogs.net/mnf/archive/2006/07/13/84942.aspx ,
that are used here.

           /// <summary>
           /// ‘StripBrackets checks that starts from sStart and ends with sEnd (case sensitive).
           ///           ‘If yes, than removes sStart and sEnd.
           ///           ‘Otherwise returns full string unchanges
           ///           ‘See also MidBetween
           /// </summary>

           public static string StripBrackets( this string str, string sStart, string sEnd)
          {
                  if (CheckBrackets(str, sStart, sEnd))
                 {
                       str = str.Substring(sStart.Length, (str.Length – sStart.Length) – sEnd.Length);
                 }
                  return str;
          }
           public static bool CheckBrackets( string str, string sStart, string sEnd)
          {
                  bool flag1 = (str != null ) && (str.StartsWith(sStart) && str.EndsWith(sEnd));
                  return flag1;
          }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文