我不是很擅长正则表达但是想做这样的事情:
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”。我将逐一传递它们。
希望它很清楚。任何其他规范????
答案 0 :(得分:1)
string[] splitArray = null;
splitArray = Regex.Split(subjectString, @"\s*\b(c|d)\b\s*");
会将字符串沿“单词”c
或d
分开,无论它们是否被空格包围,但只有当它们作为整个单词出现时(因此\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