在java中使用正则表达式进行2个正斜杠的模式匹配

时间:2018-02-11 02:02:04

标签: regex design-patterns

我想在我的word文件中对以下文本进行模式匹配,我不知道如何使用模式匹配器

(P // TRIF)
(P)
(U//TRIF)
(U) 
import java.util.ArrayList;
import java.util.List;
import java.util.regex;
public class ExtractDemo {
public static void main(String[] args) {
        String input = "I have a ( U) but I (P) like my (P//TRIF) better (U//TRIF).";

        Pattern p = Pattern.compile("(P|U|P//TRIF|U//TRIF)");
        Matcher m = p.matcher(input);

        List<String> animals = new ArrayList<String>();
        while (m.find()) {
            System.out.println("Found a " + m.group() + ".");
            animals.add(m.group());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您的正则表达式匹配UPPU

如果您想匹配(P // TRIF)(P)(U//TRIF)(U),您可以将更改中的顺序更改为 (P//TRIF|U//TRIF|P|U)

Demo output Java

如果要捕获包含组中周围括号的文本,可以尝试:

(\(\s*(?:P|U|P//TRIF|U//TRIF)\))

public static void main(String args[])
{
    String input = "I have a ( U) but I (P) like my (P//TRIF) better (U//TRIF).";

    Pattern p = Pattern.compile("(\\(\\s*(?:P|U|P//TRIF|U//TRIF)\\))");
    Matcher m = p.matcher(input);

    List<String> animals = new ArrayList<String>();
    while (m.find()) {
        System.out.println("Found a " + m.group() + ".");
        animals.add(m.group());
    }
}

Demo output Java

另一种匹配方式可能是

\(\s*[PU](?://TRIF)?\)

Demo output Java