从给定字符串中提取单词及其适当的值

时间:2017-08-07 12:24:18

标签: java regex

Amod申请多次工程入学考试,提交申请后,他收到如下信息:

Application 1: Hi Amod. Your registration number is AX1234 and hallticket number is XC876
Application 2:Hi Amod. Your hallticket is AX1234 and registration number is XC876
Application 3:Hi Amod. Your hallticket and registration are AX1234 and XC876
Application 4:Hi Amod. AX1234 and XC876 are Your hallticket and registration

现在我们需要开发一个java程序,它将从给定的字符串中提取和打印门票和注册号。在字符串中,可以更改注册号和门票号的顺序。我们需要开发一个程序,它会给出门票号码和注册号,而不用担心单词的顺序。

洗脱,直到我尝试:

我试图找到所需词语的索引,即注册,门票和两个aplhanumeric词。

String inputString = "Hi Amod. AX1234 and XC876 are Your hallticket and registration";
String inputStringArray[] = inputString.split("\\s+");
Map<String, Integer> map = new LinkedHashMap<>();
String regex = "^(?=[^\\s]*?[0-9])(?=[^\\s]*?[a-zA-Z])[a-zA-Z0-9]*$";
Pattern pattern = Pattern.compile(regex);
for (int i = 0; i < inputStringArray.length; i++) {
    switch (inputStringArray[i].toLowerCase()) {
        case "registration":
            map.put(inputStringArray[i].toLowerCase(), i);
            break;
        case "hallticket":
            map.put(inputStringArray[i].toLowerCase(), i);
            break;

    }

    if (inputStringArray[i].matches(regex)) {
        map.put(inputStringArray[i], i);
    }

}
System.out.println(map);

打印bwlow输出:

{AX1234=2, XC876=4, hallticket=7, registration=9}

现在我很困惑,如何将两个字母数字与hallticket和注册联系起来。有人可以帮助我吗??

3 个答案:

答案 0 :(得分:0)

简单类型是

feature is string

如果功能可以是hallticketregistration number,则使用正则表达式提取此功能非常简单。

更复杂的一个是

feature and feature结合string and string

[a-zA-Z0-9]+ and [a-zA-Z0-9]+的形式提取所有子字符串。其中一个匹配的子字符串将给出相对位置,另一个将给出值。

答案 1 :(得分:0)

你已经完成了大部分工作。

尝试查看句子中的顺序。如果“hallticket”这个词出现在“注册”之前,那么很可能是门票代码在句子中比注册码更早。只要确保你的正则表达式适合。

这适用于你的例句,也可能适用于每个看似合理的英语句子......

答案 2 :(得分:0)

    String inputString = "Hi Amod. Your registration number is AX1234 and hallticket number is XC876";
    Pattern p = Pattern.compile("[A-Z]{2}\\d+");
    Matcher m = p.matcher(inputString);
    String [] values = new String[2];
    int i=0;
    Map<String,String> map = new HashMap<>();
    while (m.find()) {
        values[i++] = m.group();
    } 
    if(inputString.indexOf("registration")<inputString.indexOf("hallticket")){
        map.put("registration", values[0]);
        map.put("hallticket", values[1]);
    }
    else{
        map.put("registration", values[1]);
        map.put("hallticket", values[0]);
    }
    for(Entry e: map.entrySet()){
        System.out.println(e.getKey() +" : "+e.getValue());
    }