0

我的 c# 中有一个字符串:

The.Big.Bang.Theory.(2013).S07E05.Release.mp4

我需要找到 的出现,并用_(三个下划线)(2013)替换整个内容,包括括号。所以输出将是:

大爆炸理论。_ .S07E05.Release.mp4

有没有可以做到这一点的正则表达式?或者有没有更好的方法?

然后我对新字符串进行一些处理 - 但后来,需要报告“(2013)”已被删除......所以我需要存储被替换的值。

4

6 回答 6

7

用你的字符串试过。有用

string pattern = @"\(\d{4}\)";
string search = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
var m = Regex.Replace(search, pattern, "___");
Console.WriteLine(m);

这将找到包含在打开/关闭括号中的任何 4 位数字。
如果年份数字可以改变,我认为 Regex 是最好的方法。

相反,此代码会告诉您是否有匹配的模式

var k = Regex.Matches(search, pattern);
if(k.Count > 0)
  Console.WriteLine(k[0].Value);
于 2013-04-17T12:15:54.063 回答
2

许多这些答案忘记了最初的问题,因为您想知道要替换什么。

string pattern = @"\((19|20)\d{2}\)";
string search = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
string replaced = Regex.Match(search, pattern).Captures[0].ToString();
string output = Regex.Replace(search, pattern, "___");
Console.WriteLine("found: {0}  output: {1}",replaced,output);

给你输出

found: (2013)  output: The.Big.Bang.Theory.___.S07E05.Release.mp4

这也是我的模式的解释。 \(-- 匹配 (
(19|20)-- 匹配数字 19 或 20。我假设这是从 1900 年到现在的电视节目或电影的日期。 \d{2}-- 匹配另外 2 个数字 \)-- 匹配)

于 2013-04-17T12:42:53.343 回答
1

这是来自控制台应用程序的工作片段,请注意正则表达式\(\d{4}\)

var r = new System.Text.RegularExpressions.Regex(@"\(\d{4}\)");
var s = r.Replace("The.Big.Bang.Theory.(2013).S07E05.Release.mp4", "___");
Console.WriteLine(s);

以及控制台应用程序的输出:

The.Big.Bang.Theory.___.S07E05.Release.mp4

你可以参考这个 Rubular 来证明

以下是考虑到您的附加要求的修改解决方案:

var m = r.Match("The.Big.Bang.Theory.(2013).S07E05.Release.mp4");
if (m.Success)
{
    var s = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4".Replace(m.Value, "___");
    var valueReplaced = m.Value;
}
于 2013-04-17T12:19:16.783 回答
0

尝试这个 :

 string str="The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
 var  matches = Regex.Matches(str, @"\([0-9]{4}\)");
 List<string> removed=new List<string>();
 if (matches.Count > 0)
  {
    for (int i = 0; i < matches.Count; i++)
    {
      List.add(matches.value);
    }
  }  

 str=Regex.replace(str,@"\([0-9]{4}\)","___");

System.out.println("Removed Strings are:")
foreach(string s in removed )
{
    System.out.println(s);
}

输出:

Removed Strings are:
(2013)
于 2013-04-17T12:24:06.880 回答
0

尝试这个:

    string s = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
        var info = Regex.Split(
            Regex.Matches(s, @"\(.*?\)")
            .Cast<Match>().First().ToString(), @"[\s,]+");
        s = s.Replace(info[0], "___");

结果

The.Big.Bang.Theory.___.S07E05.Release.mp4
于 2013-04-17T12:19:16.817 回答
-1

您不需要一个正则表达式来进行简单的替换(您可以使用一个,但它不是必需的)

var name = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
var replacedName = name.Replace("(2013)", "___");
于 2013-04-17T12:19:27.370 回答