匹配传入字符串与查找字符串

时间:2016-11-24 09:05:37

标签: java regex

我正在努力达到一个要求。

我正在收到文件,每个文件都包含前50个字符内的一些秘密信息。

例如我的输入文件字符串

String input = "Check      this     answer and you can find the keyword with this code";

然后我在下面给出了一个查找文件

查找字符串

this answer|Do this
not answer|Do that
example yes|Dont do

我希望将前50个字符中可能存在的秘密信息与查找字符串进行匹配。 就像在我的例子中,“这个答案”在查找字符串中与“这个答案”匹配,但空格就在那里。

所以有价值,但有额外的空间。那不是问题。信息是重要的。这是一场比赛

在info中匹配后,我将使用查找字符串中的操作信息。就像在这个例子中将是“做这个”

如何使用java或regex进行此类匹配?

我尝试过包含java的函数,但没有找到。

提前感谢所有建议

3 个答案:

答案 0 :(得分:0)

从字符串中删除空格,或在查找字符串中的单词之间添加"\s*"

答案 1 :(得分:0)

一种方法是用\s+替换表达式中的所有空格,这意味着至少有一个空白字符,然后你将得到正则表达式。

例如:

String input = ...
// Replace all spaces with \s+ an compile the resulting regular expression
Pattern pattern = Pattern.compile("this answer".replace(" ", "\\s+"));
Matcher matcher = pattern.matcher(input);
// Find a match
if (matcher.find()) {
    // Do something
}

答案 2 :(得分:0)

我会做这样的事情:

String input = "Check      this     answer and you can find the keyword with this code";
Map<String, String> lookup = new HashMap<String, String>();
lookup.put(".*this\\s+answer.+", "Do this");
lookup.put(".*not\\s+answer.+", "Do that");
lookup.put(".*example\\s+yes.+", "Dont do");

for (String regexKey : lookup.keySet()) {
    if (input.matches(regexKey)) {
        System.out.println(lookup.get(regexKey));
    }
}

或者确保匹配在前50个字符中:

String input = "Check      this     answer and you can find the keyword with this code";
Map<String, String> lookup = new HashMap<String, String>();
// Match with ^ from beginning of string and by placing parentheses we can measure the matched string when match is found.
lookup.put("(^.*this\\s+answer).*", "Do this");
lookup.put("(^.*not\\s+answer).*", "Do that");
lookup.put("(^.*example\\s+yes).*", "Dont do");


for (String regexKey : lookup.keySet()) {
    Matcher matchRegexKey = Pattern.compile(regexKey).matcher(input);
    if (matchRegexKey.matches()) {
        // Check match is in first 50 chars.
        if (matchRegexKey.group(1).length() <= 50) {
            System.out.println(lookup.get(regexKey));
        }
    }
}