c#正则表达式替换支架图案

时间:2016-07-20 04:23:49

标签: c# regex

希望这对于那里的正则表达专家来说很容易。

我有一个看起来像这样的文本文件:

blah blah blah
[Image "pasted.bmp-20160720140433"]
blah blah
[Image "pasted.bmp-20160720140458"]
blah blah
[Image "download"]
blah blah
blah blah [Image "download3"] [Image "download5"] blah blah

我希望用base64嵌入图像替换[Image“pasted.bmp-20160720140433”]。图像放置始终以“[图像”开头,并始终以“”结束括号括起来。

是否有一个简单的正则表达式替换可以完成这项工作?

编辑:

最终我希望字符串符合html:

blah blah blah
<img src='data:image/png;base64,data_which_I_get_from_using_the_file_name' />
blah blah blah

非常感谢。

1 个答案:

答案 0 :(得分:3)

\[Image "([.\-\w]+)"\]将匹配您的模式

一点解释:

\[Image "匹配模式的第一部分。 [在此转义,因为[]在正则表达式语言中具有特殊含义 [.\-\w]是一个字符列表 - .匹配句点,\-是连字符。 \w匹配任何单词字符,即A-Z, a-z, or 0-9
+表示尽可能多次匹配 ()周围的[.\-\w]+使其成为捕获组,这意味着当找到匹配项时,图像名称将可用。
最后,"\]匹配模式的结尾。

请注意,在C#中使用此功能时,您需要转义某些字符以获取正确的字符串,例如"\\[Image \"([.\\-\\w]+)\"]"或使用@ -quoted字符串,如@"\[Image ""([.\-\w]+)""\]"

此外,将来有些网站可以帮助生成正则表达式并分解它们的工作方式,请尝试将上述内容输入regex101

现在,直接使用Regex.Replace将不起作用,因为我认为base64内容将取决于图像名称。在这种情况下,您可以使用Match class

不完整的示例可能如下所示:

string pattern = @"\[Image ""([.\-\w]+)""\]";
Regex rgx = new Regex(pattern);
string file = "...";

foreach (Match match in rgx.Matches(file))
{
    // Modify file here
    // match.Index will have the position of a match
    // match.Value will have the capture, e.g. "download3"
}