gpt4 book ai didi

java - 删除 Re : Fwd: from Mail subjects

转载 作者:行者123 更新时间:2023-12-01 23:36:25 30 4
gpt4 key购买 nike

我正在尝试建立一个正则表达式来从邮件主题中删除额外的关键字,这些关键字通常由 Fwd 等邮件编辑器添加,回复:但无法提出可以满足所有这些情况的正则表达式。

Fwd : Re : Re: Many
Re : Re: Many
Re: Re: Many
Re: Many
Re: Many
RE: Presidential Ballots for Florida
RE: (no subject)
Request - should not match anything
this is the subject
Re: Fwd

我在 Java 中尝试使用这个正则表达式:

subject.replaceAll("^.{0,3}:\s", "");

但这只会删除找到的第一个匹配项。任何正则表达式,如果它可以满足大多数常见场景,那么以上所有内容也会有很大帮助。我找到了一些适用于 Python 的正则表达式,但将它们转换为 Java 非常痛苦。感谢您的帮助。

最佳答案

您可以使用以下方法删除不仅绑定(bind)到字符串开头的事件:

\b(?:Fwd|Re)\b\h*(?::\h*)?

Regex demo

注意这也将匹配最后一行 Re: Fwd


如果 Fwd 不应匹配(因此冒号不是可选的)并绑定(bind)到字符串的开头:

^(?:(?:Fwd|Re)\h*:\h*)+

解释

  • ^ 字符串开始
  • (?: 非捕获组
    • (?:Fwd|Re)\h*:\h* 匹配 FwdRe 后跟可选水平之间的冒号空格
  • )+ 关闭非捕获组,重复1+次得到所有出现

Regex demo | Java demo

例子

String regex = "^(?:(?:Fwd|Re)\\h*:\\h*)+";
String string = "Fwd : Re : Re: Many\n"
+ "Re : Re: Many\n"
+ "Re: Re: Many\n"
+ "Re: Many\n"
+ "Re: Many\n"
+ "RE: Presidential Ballots for Florida\n"
+ "RE: (no subject)\n"
+ "Request - should not match anything\n"
+ "this is the subject\n"
+ "Re: Fwd";

Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(string);
String result = matcher.replaceAll("");

System.out.println(result);

输出

Many
Many
Many
Many
Many
Presidential Ballots for Florida
(no subject)
Request - should not match anything
this is the subject
Fwd

关于java - 删除 Re : Fwd: from Mail subjects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65542586/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com