使用C#中的正则表达式基于特殊字符提取一个单词

时间:2010-04-20 07:31:26

标签: c# regex split

我不是很擅长正则表达但是想做这样的事情:

string =“c test123 d split”

我想根据“c”和“d”分割单词。这可以是我已经拥有的任何单词。该字符串将由用户给出。我希望“test123”和“split”作为我的输出。并且可以有任意数量的单词,即“c test123 d split e new”等等。我已经和我在一起了。我只想在那个词之后的下一个词,即在c之后我有test123和d之后我已经拆分了,之后我有新的所以我需要test123和split和new。我怎样才能做到这一点???还有一件事我将首先传递c而不是d而不是e。不是所有人都在一起。我试过了

  

string strSearchWord =“c”;
  正则表达式testRegex1 = new   正则表达式(strSearchWord);   列出lstValues =   testRegex1.Split(“c test123 d   分裂“)ToList();

但它仅适用于最后一个字符,即d表示最后一个字但是对于c它包括test123 d split。

我该怎么做?

输入可能是

string strSearchWord =“c mytest1 d newtest1 e lasttest1”; split应该基于字符“c d和e”。我将逐一传递它们。

string strSearchword =“q 100 p 200 t 2000”; split应该基于字符“q p和t”。我将逐一传递它们。

或 string strSearchWord =“t 100 r pass”; split应该基于字符“t r”。我将逐一传递它们。

string strSeaRCHwORD =“fi 100 se 2000 td 500 ft 200 fv 6000 lt thanks”; split应该基于字符“fi,se,td,ft,fv和lt”。我将逐一传递它们。

希望它很清楚。任何其他规范????

2 个答案:

答案 0 :(得分:1)

string[] splitArray = null;
splitArray = Regex.Split(subjectString, @"\s*\b(c|d)\b\s*");

会将字符串沿“单词”cd分开,无论它们是否被空格包围,但只有当它们作为整个单词出现时(因此\b字才会出现)边界锚。)

这为您提供了单词之间的所有子串作为数组。

如果你想手动循环遍历字符串,逐一挑选搜索词之后的每个单词,你可以使用正面的lookbehind:

string resultString = null;
resultString = Regex.Match(subjectString, @"(?<=\bc\b\s*)\w+").Value;

会在c之后找到这个词。对d(?<=\bd\b\s*)\w+)等执行相同的操作。

这个正则表达式意味着:

(?<=\bc\b\s*):断言可以将“完整单词”c(可选地后跟空格字符)匹配到字符串中当前位置的左侧(正向后观)。

\w+:然后匹配后面的任何字母数字字符(包括_)。

答案 1 :(得分:0)

使用regex groups

正则表达式将是

"c(.+?)d(.+?)"

然后将其检索为

Regex r = new Regex("c\s(.+?)\sd\s(.+?)"); // \s is whitespace
r.Match("c test123 d split").Groups[1] //is the 1st group "test123"
r.Match("c test123 d split").Groups[2] //is the 2nd group "split"
r.Match("c test123 d split").Groups[0] //is the whole match "c test123 d split