我正在努力达到一个要求。
我正在收到文件,每个文件都包含前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的函数,但没有找到。
提前感谢所有建议
答案 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));
}
}
}