代码之家  ›  专栏  ›  技术社区  ›  Abdurrafay i190610

JAVA Regex识别字符串“string”或字符串中的字符“char”

  •  0
  • Abdurrafay i190610  · 技术社区  · 2 年前

    因此,我面临以下问题:

    我得到的字符串是“string”或“char”的形式。简而言之,他们是带着自己的“”和“”来的。当我的代码中的String变量将它们存储在自己中时,它们看起来像“\”String\“”和“\”char\“”。

    (我也得到了很多不同格式的值,例如六进制、八进制和int。我使用java regex来识别它们,并且我成功地做到了。唯一的问题是字符串和字符值。)

    我想使用java regex来区分它们,并在不包含所有“”和“”的情况下获得char和string的值。

    以下是我用来识别char的模式,但它似乎不起作用。

    Pattern charPattern=Pattern.compile(“\s*[\'][\s\s][\\'][s*”);

    Pattern charPattern2=Pattern.compile(“\s*['][\s]['][s*”);

    我所期望的是,该模式将能够识别这种性质的字符“char”。之后,我可以将\'替换为空白,以获得主值。

    有人能帮忙吗。

    1 回复  |  直到 2 年前
        1
  •  1
  •   Reilas    2 年前

    …当我的代码中的String变量将它们存储在自己中时,它们看起来像这样的“\”String\“”和“\”char\“”。。。

    …我想使用java regex来区分它们,并在不包含所有“”和“”的情况下获得char和string的值。。。

    您可以使用 环顾四周 语法来断言这些值。

    这将产生重叠的值。
    例如在文本中, "abc" + x + "123" 这个 " + x + " 将被捕获。

    ((?<=\").+?(?=\")|(?<=').+?(?='))
    

    以下是使用 Pattern Matcher

    String s = "123 \"abc\" 456 def '7'89";
    Pattern p = Pattern.compile("((?<=\").+?(?=\")|(?<=').+?(?='))");
    Matcher m = p.matcher(s);
    while (m.find()) System.out.println(m.group(1));
    

    输出

    abc
    7
    

    或者,捕获引号,消除重叠值,并以编程方式删除基准。

    (\".+?\"|'.+?')
    
    String s = "123 \"abc\" 456 def '7'89", g;
    Pattern p = Pattern.compile("(\".+?\"|'.+?')");
    Matcher m = p.matcher(s);
    while (m.find()) {
        g = m.group(1);
        System.out.println(g.substring(1, g.length() - 1));
    }