我无法解决一个场景:以下是示例数据:
5 AP 7122784
6 APB+5115400852
7猿ABC.XYZ@LOM.COM
8猿松懈*ABC.XYZ@LOM.COM
9猿ERT-EDF@UK.TR.EDS
APE是告诉我们它是一个电子邮件id字段的标识符。
我们必须根据以下规则选择电子邮件id:
- 如果存在LAX*,则在LAX*之后获取值并获取它。即。ABC.XYZ@LOM.COM
- 如果LAX*的电子邮件id不在数据中(8 APE LAX*ABC.XYZ@LOM.COM-记录不在那里(,然后选择所有电子邮件ID,即。ABC.XYZ@LOM.COM和ERT-EDF@UK.TR.EDS.
有人能帮我吗?
感谢
我想创建一个Java代码,如下所示:
导入java.util.regex.Matcher;
导入java.util.regex.Pattern;
要扫描以查找图案的字符串。
String regex = "(APE\sPAX\*|APE\s)(?<email>.*)\s*";
String string = "5 AP 7122784n"
+ "6 APB +5115400852n"
+ "7 APE ABC.XYZ@LOM.COMn"
+ "8 APE PAX*ABC.XYZ@LOM.COMn"
+ "9 APE ERT-EDF@UK.TR.EDS";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}`
并在Java内部使用if-else捕获组。
在此处输入图像描述
上述Java代码的Scrreenshot:
使用以下正则表达式:
^d+ +APE +LAX*(.*)
使用多行标志(正则表达式开头的/m
或(?m)
(来确定是否存在以一个或多个数字开头、后跟多个空格、后跟APE
、后跟一个或更多空格、后跟LAX*
的行。如果存在匹配,则捕获组1将包含该行的其余部分,该行被假定为电子邮件地址。这是
ABC.XYZ@LOM.COM
演示
如果没有匹配项,请使用以下带有多行标志的正则表达式:
^d+ +APE +(.*)
每个匹配的捕获组1的内容是感兴趣的电子邮件地址之一。这里(在去除线8 APE LAX*ABC.XYZ@LOM.COM
之后(将存在两个匹配,其中捕获组包含ABC.XYZ@LOM.COM
和ERT-EDF@UK.TR.EDS
。
演示