希望这对于那里的正则表达专家来说很容易。
我有一个看起来像这样的文本文件:
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
非常感谢。
答案 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"
}