有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java查找两个带空格和不带空格但有单词边界的单词

我对regex世界还不熟悉。所以请原谅。努力学习,我有以下要求

我正试图找到一个正则表达式,它可以从下面的字符串中找到CisCis-femal

字符串:This usa gender Female male Cis Female a2412421

我试过:

  1. \bCis(.)*Female\b
  2. \bCis\s*Female\b
  3. \bCis(.)*Female\b
  4. \bCis\b|\bCis Female\b
  5. (\bCis\b)|(\bCis Female\b)

应用正则表达式后,输出应为CisCis-Female。任何线索都是非常感谢的。提前谢谢


共 (2) 个答案

  1. # 1 楼答案

    我会这样做:

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class Main {
        public static void main(String[] args) {
            // Test strings
            String[] arr = { "This usa gender Female male Cis Female a2412421", "This usa gender Female male Cis a2412421",
                    "This usa gender Female male Cis" };
    
            for (String s : arr) {
                System.out.println("Processing '" + s + "' =>");
                Matcher matcher = Pattern.compile("(Cis)(\\s+\\w+)?").matcher(s);
                String group = "";
                while (matcher.find()) {
                    group = matcher.group();
                    if ("Cis Female".equals(matcher.group())) {
                        // ... Perform some operation
                        System.out.println(group);
                    } else {
                        // ...Get just 'Cis' and perform some operation
                        System.out.println(matcher.group(1));
                    }
                }
            }
        }
    }
    

    输出:

    Processing 'This usa gender Female male Cis Female a2412421' =>
    Cis Female
    Processing 'This usa gender Female male Cis a2412421' =>
    Cis
    Processing 'This usa gender Female male Cis' =>
    Cis
    

    请注意,正则表达式(Cis)(\s+\w+)?Cis匹配,后跟可选字符(一个或多个空格字符,后面跟着一个或多个单词字符)

  2. # 2 楼答案

    你可能是说这样的事

    String str = "This usa gender Female male Cis Female a2412421";
    Matcher matcher = Pattern.compile("((\\bCis\\b)\\s+\\bFemale\\b)").matcher(str);
    while (matcher.find()) { // or if (matcher.find())
        System.out.println(matcher.group(1)); // Cis Female
        System.out.println(matcher.group(2)); // Cis
    }
    

    在这里,您将“Cis”和“Cis女性”匹配为两个组。CI和女性都有一个(零长度)单词边界和1。。n它们之间的空格

    一些背景:您不能在一个匹配器调用中多次匹配输入字符串中的同一部分。因此,您必须应用两个正则表达式。现在,您需要用一个正则表达式匹配两个字符序列。这可以通过如下所述将它们匹配到不同的组中来实现