regex - 正则表达式在imap响应中获取文件的base64字符串

标签 regex flutter dart base64

我需要解析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/

    相关文章:

    python - 使用Python正则表达式替换字符串中的多个变量值

    python - 使用正则表达式替换单词不起作用

    android - 为什么ImagePicker无法选取多张图片

    flutter - 无法使用工作管理器在后台执行异步方法

    javascript - 正则表达式不允许没有前缀或后缀的特殊字符

    flutter - Flutter:列表滚动上的sliverAppBar调整大小问题

    android - flutter 中的 FCM 自定义通知图标

    google-maps - 在 Flutter Google map 上绘制标记

    drop-down-menu - 从第一个下拉列表的值获取第二个下拉列表

    c# - 正则表达式,检查特定长度范围之间的数字。 C#/ASP.NET