gpt4 book ai didi

正则表达式,用于匹配音乐和弦

转载 作者:行者123 更新时间:2023-12-04 04:26:31 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来解析音乐和弦的字符串表示形式。

例如:C大调和弦-> Cmaj (这是我要解析的内容)

为了清楚起见,和弦由三个不同的部分组成:

  • 音符(C,D,E,F,G,A)
  • 该音符(#,##,b,bb)的意外内容
  • 和弦名称

  • 对于那些精通音乐的人,我没有考虑斜线和弦(故意)。

    下面的功能几乎可以正常工作。但是,在以下情况下仍然无法使用:
  • “C#maj”#匹配并且应该
  • “C#maj7”#匹配并且应该
  • “C#maj2”#数学,不应该

  • 我想如果可以将 chords正则表达式部分强制置于正则表达式的末尾,就可以了。我试过在此String之前和之后都使用 $,但是它不起作用。

    任何想法?谢谢。
    public static void regex(String chord) {                
    String notes = "^[CDEFGAB]";
    String accidentals = "[#|##|b|bb]";
    String chords = "[maj7|maj|min7|min|sus2]";
    String regex = notes + accidentals + chords;
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(chord);
    System.out.println("regex is " + regex);
    if (matcher.find()) {
    int i = matcher.start();
    int j = matcher.end();
    System.out.println("i:" + i + " j:" + j);
    }
    else {
    System.out.println("no match!");
    }
    }

    最佳答案

    在以下几行中将[]更改为():

    String accidentals = "(#|##|b|bb)";
    String chords = "(maj7|maj|min7|min|sus2)";

    否则,您只是在制作字符类,因此 [maj7|maj|min7|min|sus2]仅与字母 m匹配。

    我猜您也想添加结尾 anchor $吗?我看到您之前对此有问题,但这可能是由于上述问题。

    另外,您是否希望 (#|##|b|bb)是可选的(即 ?: (#|##|b|bb)?)?

    关于正则表达式,用于匹配音乐和弦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229080/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com