【问题标题】:Write Regex Compatible with java编写与java兼容的正则表达式
【发布时间】:2020-07-05 14:33:33
【问题描述】:

我无法解决一种情况: 以下是样本数据:

5 AP 7122784

6 APB +5115400852

7 APE ABC.XYZ@LOM.COM

8 APE LAX*ABC.XYZ@LOM.COM

9 APE ERT-EDF@UK.TR.EDS

APE 是一个标识符,它告诉我们它是一个电子邮件 ID 字段。

我们必须根据以下规则选择电子邮件 ID:

  1. 如果存在 LAX*,则在 LAX* 之后获取值并获取它。即 ABC.XYZ@LOM.COM
  2. 如果带有 LAX* 的电子邮件 ID 不在数据中(8 APE LAX*ABC.XYZ@LOM.COM - 记录不存在)然后选择所有电子邮件 ID,即 ABC.XYZ@LOM.COM 和 ERT-EDF @UK.TR.EDS。

有人可以帮我解决这个问题吗?

谢谢

【问题讨论】:

  • 您需要做的不仅仅是一个正则表达式。这需要ifelse if 场景。

标签: regex regex-lookarounds regex-negation regex-group regex-greedy


【解决方案1】:

我正在考虑创建一个如下所示的 Java 代码:

导入 java.util.regex.Matcher;

导入 java.util.regex.Pattern;

要扫描的字符串以查找模式。

 String regex = "(APE\\sPAX\\*|APE\\s)(?<email>.*)\\s*";

 String string = "5 AP 7122784\n"

 + "6 APB +5115400852\n"

 + "7 APE ABC.XYZ@LOM.COM\n"

 + "8 APE PAX*ABC.XYZ@LOM.COM\n"

 + "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 捕获组。

enter image description here

以上Java代码截图:

【讨论】:

    【解决方案2】:

    使用这个正则表达式:

    ^\d+ +APE +LAX\*(.*)
    

    使用多行标志(/m(?m) 在正则表达式的开头)来确定是否有一行以一个或多个数字开头,后跟多个或多个空格,后跟 APE,后跟一个或多个空格后跟LAX*。如果有匹配捕获组 1 将包含该行的其余部分,假定为电子邮件地址。这里是

    ABC.XYZ@LOM.COM
    

    Demo

    如果没有匹配,请使用以下带有多行标志的正则表达式:

    ^\d+ +APE +(.*)
    

    每个匹配的捕获组 1 的内容是感兴趣的电子邮件地址之一。这里(删除8 APE LAX*ABC.XYZ@LOM.COM 行之后)会有两个匹配项,捕获组包含ABC.XYZ@LOM.COMERT-EDF@UK.TR.EDS

    Demo

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多