匹配并捕获列表中的每个单词以及这些单词之间的内容

时间:2014-05-22 14:42:25

标签: c# regex

我正在尝试捕获数组内部的字符串中的每个单词,并且我还想捕获不是的每个单词(基本上用我拥有的单词和我不喜欢的单词来分割字符串)吨)。

为了澄清,这是一个例子:

输入:

  

string myString =“ID-NUMthatissomeboringstuffNAME”

     

string [] wordsList = new string [] {“ID”,“NUM”,“NAME”};

所需的输出捕获(按顺序):

  

(ID)

     

( - )

     

(NUM)

     

(thatissomeboringstuff)

     

(NAME)

我的正则表达方式:

string regex = String.Format("(({0})|.*)", String.Join("|", rules))

当然它不起作用,当我试图更换时,它只会给我第一封信。

再一次,我原来的问题已经解决了(我只是想解析一个这样的字符串并根据我在其中发现的内容添加一些值...仅仅Replace就足够了:p < / em>),但为了完整起见,我还是想以这种方式解决它。

3 个答案:

答案 0 :(得分:2)

这应该({0}|[^({0})]+)。这是Regexr breakdown

<强>代码

var input = "ID-NUMthatissomeboringstuffNAME";

string[] wordsList = new string[] { "ID", "NUM", "NAME" };
string regex = String.Format( "({0}|[^({0})]+)", String.Join( "|", wordsList ) );

foreach(var match in Regex.Matches( input, regex )
                          .OfType<Match>()
                          .Select( match => match.Captures[0].Value ) ){
    Console.WriteLine( match );
}

答案 1 :(得分:0)

indexOf(string)

为您提供字符串的位置,您可以使用

substring(indexStart, word length)

得到它

答案 2 :(得分:0)

我不确定这是否更具可读性,但您可以使用此正则表达式:

@"(?<g0>[A-Z]*)(?<g1>[^A-Z]*)(?<g2>[A-Z]*)(?<g3>[^A-Z]*)(?<g4>[A-Z]*)"

它会找到您找到的内容,查找大写字母组,然后是非大写字母等,并将它们存储在命名组中。