所以这是字符串: “DC:PPE环境:CH1切片:无论提取什么” 或“babaasdfsd DC:PPE asdfas Env:CH1或Slice:what”
基本上我试图找到“DC:PPE”“Env:CH1”“Slice:whatever”并删除它们。
我正在使用以下正则表达式:(c#)
Regex r = new Regex(
@"(?:
(?<captured>(?:^|\s+)Slice|Env|Dc:.*?\s+)()
){1}
\1",
(?:^|\s+)
我试图匹配Slice | Env | Dc出现在开头或者带有前导空格。
使用.*?\s+
我试图在DC:PPE之后非贪婪地匹配空格。
我想让它一起归还所有三场比赛。 这有什么问题?
string combinedTestSTring = "DC:PPE Env:CH1 Slice:whatever to extract";
Regex r = new Regex(
@"(?:
(?<captured>(?:^|\s+)Slice|Env|Dc:.*?\s+)()
){1}
\1",
RegexOptions.IgnorePatternWhitespace|RegexOptions.IgnoreCase);
var a = r.Matches(combinedTestSTring);
答案 0 :(得分:0)
这是否符合您的要求:
Regex r = new Regex(@"\b(:?Slice|Env|Dc):.+?)\b");
\b
匹配单词边界。然后它匹配Slice|Env|Dc
后跟:
,然后匹配至少一个字符,直到另一个字边界。
您不能同时归还所有比赛。返回匹配数组时,每个元素对应于regexp中的不同捕获组。如果您有一个包含重复计数或通配符的组,则返回的匹配只是找到的最后一个匹配,而不是所有匹配。所以你必须编写一个遍历输入字符串的循环,返回每个匹配。
但是,如果您只想全部替换它们,r.Replace()
将会这样做,因为它会替换字符串中的所有匹配项。