我需要解析imap响应以获取文件的base64字符串。
该字符串是这样的:
--------------A5B0A8B4F69F8BD959B758D0
Content-Type: application/pdf;
name="Myfile.pdf"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Myfile.pdf"
JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT
ZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2
NmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0
eHJlZgoyMzg2NgolJUVPRgo=
--------------A5B0A8B4F69F8BD959B758D0--
我需要在filename="Myfile.pdf"
之后(可能不包括空格)以及在=
之后的新行之前获取任何内容我正在尝试使用此正则表达式,但未成功:
(?<=filename="Myfile\.pdf")(.*)(?=\r\n)
其实我不确定base64字符串中是否有空格或换行符,我认为。
最佳答案
您可以使用
filename="Myfile\.pdf"\s*(\S.*(?:\n\S.*)*)
参见regex demo。 详细信息:filename="Myfile\.pdf"
-一个filename="Myfile.pdf"
字符串\s*
-0个或多个空格(\S.*(?:\n\S.*)*)
-组1:\S
-一个非空格char .*
-其余行(?:\n\S.*)*
-0或多个不以空格开头的行。 Dart / Flutter代码以获取第一个匹配项:
final base64str = '--------------A5B0A8B4F69F8BD959B758D0\nContent-Type: application/pdf;\n name="Myfile.pdf"\nContent-Transfer-Encoding: base64\nContent-Disposition: attachment;\n\nfilename="Myfile.pdf"\n\nJVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT\nZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2\nNmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0\neHJlZgoyMzg2NgolJUVPRgo=\n\n--------------A5B0A8B4F69F8BD959B758D0--';
final rx = RegExp(r'filename="Myfile\.pdf"\s*(\S.*(?:\n\S.*)*)');
final match = rx.firstMatch(base64str);
if (match != null) {
print(match.group(1));
}
输出:JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL1hPYmplY3QvQ29sb3JT
ZWI0ODRmNDE1ZDE0YmIyZmU2YjAzZDMzNjU+PGU5MDFiZTMzY2FlOTY4ZDM2
NmFmOGNhOTUxNTE0Nzk0Pl0vSW5mbyAyMyAwIFIvU2l6ZSAyND4+CnN0YXJ0
eHJlZgoyMzg2NgolJUVPRgo=
关于regex - 正则表达式在imap响应中获取文件的base64字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63252511/