1

我想剥离字符串,但只留下以下内容:

[a-zA-Z]+[_a-zA-Z0-9-]*

我正在尝试输出以字符开头的字符串,然后可以包含字母数字、下划线和破折号。如何使用 RegEx 或其他函数执行此操作?

4

5 回答 5

2

因为正则表达式第二部分中的所有内容都在第一部分中,所以您可以执行以下操作:

String foo = "_-abc.!@#$5o993idl;)"; // your string here.
//First replace removes all the characters you don't want.
foo = Regex.Replace(foo, "[^_a-zA-Z0-9-]", "");
//Second replace removes any characters from the start that aren't allowed there.
foo = Regex.Replace(foo, "^[^a-zA-Z]+", "");

因此,首先将其缩减为仅允许的字符。然后摆脱任何不能在开头的允许字符。

当然,如果你的正则表达式变得更复杂,这个解决方案很快就会崩溃。

于 2012-06-07T19:55:54.417 回答
0

已编辑

   var s = Regex.Matches(input_string, "[a-z]+(_*-*[a-z0-9]*)*", RegexOptions.IgnoreCase);
            string output_string="";
            foreach (Match m in s)
            {
                output_string = output_string + m;

            }
    MessageBox.Show(output_string);
于 2012-06-07T19:54:50.407 回答
0

假设您在集合中有字符串,我会这样做:

  1. 集合中的 foreach 元素尝试匹配正则表达式
  2. 如果!成功,则从集合中删除字符串

或者反过来 - 如果匹配,则将其添加到新集合中。

如果字符串不在集合中,您可以添加更多关于您的输入内容的详细信息吗?

于 2012-06-07T19:56:52.157 回答
0

如果要提取与正则表达式匹配的所有标识符,可以这样做:

var input = " _wontmatch f_oobar0 another_valid ";
var re = new Regex( @"\b[a-zA-Z][_a-zA-Z0-9-]*\b" );
foreach( Match match in re.Matches( input ) )
    Console.WriteLine( match.Value );
于 2012-06-07T20:00:34.030 回答
0

采用MatchCollection matchColl = Regex.Matches("input string","your regex");

然后使用:

string [] outStrings = new string[matchColl.Count]; //A string array to contain all required strings

for (int i=0; i < matchColl.Count; i++ )
     outStrings[i] = matchColl[i].ToString();

您将在 outStrings 中拥有所有必需的字符串。希望这可以帮助。

于 2012-06-07T20:10:30.197 回答