【发布时间】:2019-07-31 20:28:30
【问题描述】:
我想从一个巨大的数据库中提取字符串。有时(并非总是)这些字符串末尾包含一种序列号,我想将其删除。序列号始终具有相同的外观,例如:
string text = "176 - monoring_01 (xktz) (bd685448-c2cf-4433-az87-8ebc9be5ae56)"
我想只获取“176 - monoring_01 (xktz)”部分并删除包括括号在内的序列号。
我正在使用 Visual Studio 2017。
这就是我尝试过的:
if (text.Contains(@" ?\(.{36}\)"))
{
text_m = Regex.Replace(text, @" ?\(.*?\)", string.Empty);
else
{
text_m =text;
}
但我总是得到完整的字符串。所以,我尝试了:
Console.WriteLine(text.Contains(@" ?\(.{36}\)"));
确实输出为“假”,因此它无法识别 36 位数字之间的括号。 这里有什么问题?
【问题讨论】:
-
Contains 不使用正则表达式,你应该使用 Regex.IsMatch()
-
另外,我建议您在替换中使用与您在比赛中使用的相同的正则表达式,否则您可能会感到惊讶;)。顺便说一句,您不需要使用 if 进行测试,如果不匹配,regex.Replace 将不会替换任何内容
-
string.Contains不接受正则表达式,请使用Regex.IsMatch(string, pattern)