当前位置: 首页 > 知识库问答 >
问题:

在正则表达式[closed]的HashMap中查找匹配字符串时出错

甄云
2023-03-14

这个问题是由打字错误或无法再复制的问题引起的。虽然这里可能有类似的问题,但这一问题的解决方式不太可能帮助未来的读者。

我试图在HashMap中找到字符串,该字符串对于给定的单词有一个子字符串。在我的代码中,输出是“1 2 3 4”(所有索引)。输出应为“2 3”。

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class App {
    public static void main(String[] args) throws Exception {

         Map<Integer, String> map = new HashMap<>();
         map.put(1,"cracking the coidng");
         map.put(2,"java essentials");
         map.put(3,"Elem java practice");
         map.put(4,"Python exercises");
         
         String regex = "java";

         Pattern p = Pattern.compile(".*[" + regex + "].*");

         for(Map.Entry<Integer,String> entry : map.entrySet()){

              Matcher m = p.matcher(entry.getValue());

              if(m.matches()){
                  System.out.println(entry.getKey());
              }
         } 
    }
}

共有3个答案

闻人景澄
2023-03-14

如果我执行这个,我会

1张

2.

3.

因为,*[java]* is字符类

Python练习没有任何a、j或v

如果要使用字符串基条件,请使用*(爪哇)* 或<代码>*java* 而不是*[java]*

龙俊美
2023-03-14

问题似乎出在正则表达式上,使用<代码>*(爪哇)* 当正则表达式工作时。在您的例子中,这将使用括号而不是括号。括号用于固定组(如单词),括号用于字母范围(如a-z)。

叶经略
2023-03-14

正则表达式*[java]* 与示例值中的3个值匹配,因为括号创建的括号表达式与括号之间的任何字符匹配。看见https://regex101.com/r/GAABU1 .

我想你想要<代码>*java* (不带括号)。

 类似资料:
  • 问题内容: 有没有办法找出Python字符串中某个正则表达式的匹配项?例如,如果我有字符串 我想知道字符串中出现了多少次。在该字符串中,出现两次。我希望函数告诉我它出现了两次。这可能吗? 问题答案: 现有的基于解决方案的解决方案适用于非重叠匹配(毫无疑问是最佳的,可能是因为匹配数量巨大),尽管诸如(避免在您只关心计数时实现列表)的替代方案也很可能。某种特质将使用并忽略结果字符串…: 如果您只想数数

  • 问题内容: 我在尝试将我的javascript regex经验转移到Python时遇到了麻烦。 我只是想让它工作: …但是它打印无。如果我做: 它匹配…默认情况下是否匹配字符串的开头?当匹配时,如何使用结果? 我如何进行第一场比赛?是否有比python网站提供的文档更好的文档? 问题答案: 隐式添加到您的正则表达式的开头。换句话说,它仅在字符串的开头匹配。 将在所有位置重试。 一般来说,建议您在需

  • 问题内容: 我在用Python将字符串中的数字匹配时遇到麻烦。尽管应该明确匹配,但甚至不匹配 或仅匹配。我的监督在哪里? 问题答案: 阅读文档:http : //docs.python.org/2/library/re.html#re.match 如果在零个或多个字符 开头 的 字符串 您要使用(或)

  • 问题内容: 我试图返回一个数组或切片,针对字符串针对特定正则表达式的所有匹配项。字符串是: 我想返回一个花括号之间所有字符串都匹配的数组。我尝试使用regexp软件包来完成此操作,但无法弄清楚如何返回我要查找的内容。这是我当前的代码: 但是,无论我尝试什么,每次返回的结果都是一片空白。 问题答案: 首先,您不需要正则表达式定界符。其次,使用原始字符串文字定义一个正则表达式模式是个好主意,您只需要使

  • 问题内容: 我会在开头提到这个问题,尽管我离正则表达式专家很远,但是它们对我来说并不完全陌生。对于我来说,构建正则表达式来搜索特定字符串中的模式通常不是问题,但是我有一个(也许是?)独特的情况。 我有一组价值观,例如: 028938 DEF567987 390987.456 GHI345928.039 我想匹配一组特定的字符串,例如: 完全由6位数字组成的字符串 字符串,由正好6位数字,十进制组成

  • 我正在arround制作一个与字符串的某个块匹配的正则表达式,问题是它包含许多相似的块,并且没有清楚地分开,所以我不知道如何停止正则表达式。 字符串的例子 所以我要做的是匹配并只选择第一个A1。到目前为止,我所做的是: