Regex查找和替换字符串中的年份

本文关键字:字符串 查找 替换 Regex | 更新日期: 2023-09-27 18:09:33

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

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

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

The.Big.Bang.Theory。 _ .S07E05.Release.mp4

是否有一个正则表达式可以做到这一点?还是有更好的方法?

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

Regex查找和替换字符串中的年份

试过了。它是

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);

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

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个数字')——match)

下面是控制台应用程序的工作代码片段,注意正则表达式'('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

,你可以参考这个规则来证明。

以下是考虑到您的额外要求而修改的解决方案:

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;
}

试试这个:

    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

try this:

 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)

对于简单的替换,您不需要正则表达式(您可以使用正则表达式,但不需要)

var name = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
var replacedName = name.Replace("(2013)", "___");