我的c#中有一个字符串:
The.Big.Bang.Theory。(2013).S07E05.Release.mp4
我需要找到(2013)
的出现,并用 _ (三个下划线)替换整个事物,包括括号。所以输出将是:
The.Big.Bang.Theory。 _ .S07E05.Release.mp4
是否有正则表达式可以做到这一点?或者有更好的方法吗?
然后我对新字符串进行了一些处理 - 但后来需要报告'(2013)'已被删除..所以我需要存储被替换的值。
答案 0 :(得分:5)
尝试用你的字符串。它的工作原理
string pattern = @"\(\d{4}\)";
string search = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
var m = Regex.Replace(search, pattern, "___");
Console.WriteLine(m);
这将在打开/关闭的托架中找到任何4位数字 如果年份数可以改变,我认为正则表达式是最好的方法。
相反,此代码会告诉您模式是否匹配
var k = Regex.Matches(search, pattern);
if(k.Count > 0)
Console.WriteLine(k[0].Value);
答案 1 :(得分: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位数字
\)
- 匹配)
答案 2 :(得分: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
你可以reference this Rubular for proof。
以下是一个经过修改的解决方案,考虑到您的额外要求:
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;
}
答案 3 :(得分: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
答案 4 :(得分: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)
答案 5 :(得分:-1)
您不需要正则表达式来进行简单替换(您可以使用一个,但不需要它)
var name = "The.Big.Bang.Theory.(2013).S07E05.Release.mp4";
var replacedName = name.Replace("(2013)", "___");